网站框架是什么,有没有专做自驾游的网站,华为荣耀官网手机商城,个人网站建设总结1004 最大连续1的个数 III 这道题要求将原数组中的0翻转成1#xff0c;求出最大元素全是1的子数组长度#xff0c;看这道题第一感觉还要将里面的0变成1#xff0c;感觉这道题解决起来很麻烦#xff0c;但是我们可以转变思路#xff0c;找出其最大子数组#xff0c;使得子…1004 最大连续1的个数 III 这道题要求将原数组中的0翻转成1求出最大元素全是1的子数组长度看这道题第一感觉还要将里面的0变成1感觉这道题解决起来很麻烦但是我们可以转变思路找出其最大子数组使得子数组里面0元素的个数不超过 k然后求其子数组长度。
算法步骤 1. 利用同向指针 left 和 right 指向数组的第一个下标位置 2. 让 right 指针往数组后面走使用记录 0 个数的变量 count 当count k 时说明 [leftright)区间内 0 的个数已经大于 k 然后让 left 往右走 减小 0 的个数即--count当 count 不大于 k 时结束 3. 更新子数组长度的结果。
class Solution {
public:int longestOnes(vectorint nums, int k) {int left 0, right 0 ;int maxSum 0; //记录最长子数组的长度int count 0; // 记录 0 的个数while(right nums.size()){if(nums[right] 0){count;}while(count k){if(nums[left] 0){--count;}}//更新结果maxSum max(maxSum,right-left1);right;}return maxSum;}
};