Loading

LC1437 相邻1至少相隔k个零

题面

LC1437

代码

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的位置,并计算距离就可以了

待续

posted @ 2025-11-17 11:57  kozumi  阅读(4)  评论(0)    收藏  举报