当前位置:   article > 正文

最大连续1的个数 ||| ---- 滑动窗口

最大连续1的个数 ||| ---- 滑动窗口

题目链接

题目:

分析:

  • 题目中说可以将最多k个0翻转成1, 如果我们真的这样算就会十分麻烦, 所以我们可以换一种思路:  找到一个最长的子数组, 最多有k个0
  • 解法一: 暴力解法: 找到所有的最多有k个0的子字符串, 返回最长的
  • 解法二: 找到最长的子数组, 我们可以想到"滑动窗口算法"
    • left = 0, right = 0;
    • 进窗口  计算0的个数
    • 判断  0的个数是否大于k
    • 出窗口 如果0的个数大于k, 则出窗口, 出到0的个数<=k为止
    • 更新数据  每次进窗口出窗口都要比较长度, 留下长的

代码:

  1. class Solution {
  2. public int longestOnes(int[] nums, int k) {
  3. int left = 0;
  4. int right = 0;
  5. int count = 0;
  6. int len = 0;
  7. while (right < nums.length) {
  8. if (nums[right] == 0)
  9. count++;
  10. while (count > k) {
  11. if (nums[left] == 0)
  12. count--;
  13. left++;
  14. }
  15. len = Math.max(len, right - left + 1);
  16. right++;
  17. }
  18. return len;
  19. }
  20. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/506275
推荐阅读
相关标签
  

闽ICP备14008679号