LC1437 相邻1至少相隔k个零
题面
代码
class Solution:
def kLengthApart(self, nums: List[int], k: int) -> bool:
# 维护当前的1之间的最小间距
minApart = +inf
numZeros = 0
found1 = False
for num in nums:
# print(f"{num} {minApart} {numZeros}")
if num == 1 and found1 == False:
found1 = True
continue
elif num == 1 and found1 == True:
minApart = min(numZeros, minApart)
numZeros = 0
continue
if num == 0 and found1 == True:
numZeros += 1
continue
if minApart >= k:
return True
else:
return False
class Solution:
def kLengthApart(self, nums: List[int], k: int) -> bool:
# 直接维护当前的1之间的间距
cnt = k
found1 = False
for num in nums:
if num == 1:
if cnt > 0 and found1 == True:
return False
cnt = k
found1 = True
elif num == 0:
cnt -= 1
return True
class Solution {
public:
bool kLengthApart(vector<int>& nums, int k) {
int cnt = k;
bool found1 = false;
for(int& num : nums) {
if(num == 1 && found1 == true) {
if(cnt > 0) {
return false;
}
cnt = k;
} else if(num == 1 && found1 == false) {
found1 = true;
cnt = k;
} else if(num == 0) {
--cnt;
}
}
return true;
}
};
思路
- 需要常数优化(缓存友好、分支预测)
- 维护最小值是没有必要的,直接维护上一个1的位置,并计算距离就可以了
待续

浙公网安备 33010602011771号