【滑动窗口】1004. 最大连续1的个数 III

1004. 最大连续1的个数 III

解题思路

  • 维护一个滑动窗口,滑动窗口满足窗口内0的个数是k
  • 循环遍历数组,使用滑动窗口的右指针
  • 判断右指针的字符是不是0 若是 count++
  • 判断窗口内的0个数是不是大于0 如果是 移动滑动窗口左指针
  • 当count == k 计算最大1的个数
class Solution {
    public int longestOnes(int[] nums, int k) {
        // 滑动窗口
        // 滑动窗口的满足条件是 窗口内的0个数为k
        int left = 0;
        // int right = 0;
        int count =0;
        int result = 0;

        for(int right = 0; right < nums.length; right++){
            // 计算滑动窗口内的0字符个数

            // 判断滑动窗口右边的字符
            if(nums[right] == 0){
                count++;
            }

            // 计算窗口长度  其实是0的个数
            // int dis = right - left + 1;
            while(count > k){
                if(nums[left++] == 0){
                    count--;
                    // left++;// 滑动窗口向前移动
                }
            }

            // 记录最大窗口
            result = Math.max(result,right - left + 1);
        }

        return result;
    }
}

你可能感兴趣的:(#,Leetcode,算法,数据结构)