Leetcode_滑动窗口_高频08_1004. 最大连续1的个数 III

106 阅读1分钟
  1. 最大连续1的个数 III

本道题目和424. 替换后的最长重复字符基本上思路是一致的,并且由于是只有0和1在数组中,这道题目就相对简单一些。 步骤:

  1. 右指针不断右移,如果遇到0,就记录对于0的counter++。
  2. 根据0的counter是否超过k来决定移动左指针。如果超过k,那么移动左指针,直到break掉超过k的这种情景。
  3. 统计长度。
class Solution {
    public int longestOnes(int[] nums, int k) {
        if (k >= nums.length) {
            return nums.length;
        }
        int l = 0;
        int r = 0;
        // 记录当前窗口中0的个数,如果超过k个,那么移动左指针
        int countZero = 0;
        int res = 0;
        while (r < nums.length) {
            if (nums[r] == 0) {
                countZero++;
            }
            // 如果超过k个,那么移动左指针
            while (countZero > k) {
                if (nums[l] == 0) {
                    countZero--;
                }
                l++;
            }
            res = Math.max(res, r - l + 1);
            r++;
        }
        return res;

    }
}