LeetCode 1004.最大连续1的个数III
LeetCode 1004.最大连续1的个数III
思路🧐:
如示例1所示,我们可以翻转0来得到一个最大长度,那么我们可以用滑动窗口来解决,遇到1时不做判断,当遇到0时,用一个计数器来保存个数,当个数超过K时,右指针停止移动,开始移动左指针,当左指针遇到0时,计数器-1,直到计数器小于K时,再次移动右指针,并且每次都计算长度,当这样遍历完整个数组后,就可以得到一个最大值。
代码🔎:
class Solution { public: int longestOnes(vector<int>& nums, int k) { int ret = 0; int count = 0; for(int right = 0,left = 0; right < nums.size(); right++) { if(nums[right] == 0)//当遇到0时,count++ count++; while(count > k) //count大于k,需要出窗口 { if(nums[left++] == 0) //left遇到0,count-- count--; } ret = max(ret,right - left + 1); //更新,这里需要每次更新 } return ret; } };
时间复杂度:O(N) 空间复杂度:O(1)