leetcode刷题(第1004题)——最大连续1的个数 III

x33g5p2x  于2022-04-10 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(484)

一、题目

  1. 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 0 ,则返回
  2. 组中连续 1 的最大个数

二、示例

  1. 输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
  2. 输出:6
  3. 解释:[1,1,1,0,0,1,1,1,1,1,1]
  4. 粗体数字从 0 翻转到 1,最长的子数组长度为 6
  1. 输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
  2. 输出:10
  3. 解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
  4. 粗体数字从 0 翻转到 1,最长的子数组长度为 10

三、思路

  1. 这里使用左右指针,维持一个滑动窗口,不断的向左移动指针,并且不断地更新最大值。

四、代码展示

  1. /**
  2. * @param {number[]} nums
  3. * @param {number} k
  4. * @return {number}
  5. */
  6. var longestOnes = function(nums, k) {
  7. let left = 0
  8. let right = 0
  9. let maxLen = k
  10. let zeroNum = 0
  11. let len = nums.length
  12. while(right <= len) {
  13. maxLen = Math.max(maxLen, right - left)
  14. if(nums[right] === 0) {
  15. zeroNum++
  16. }
  17. while(zeroNum > k) {
  18. if(nums[left] === 0) {
  19. zeroNum--
  20. }
  21. left++
  22. }
  23. right++
  24. }
  25. return maxLen
  26. };
  27. //[1,1,1,0,0,0,1,1,1,1,0]

五、总结

《新程序员》:云原生和全面数字化实践

50位技术专家共同创作,文字、视频、音频交互阅读

相关文章