主页 > 其他  > 

1004.最大连续1的个数III

1004.最大连续1的个数III

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三

一、题目

二、思路 2.1 解题思路 2.2 代码尝试 class Solution { public: int longestOnes(vector<int>& nums, int k) { int m=k; //每个窗口遇到0的时候先使用K,到k用完了之后再统计长度 int cur=0;//记录当前长度 int count=0;//记录最大长度 int l=0;//有一个左边界用于记录滑动窗口的左边界 for(int i=0;i<nums.size();i++){ //判断是否为1 if(nums[i]==1){ cur++; count=max(cur,count); }else{ //分两种情况,m可用和m不可用 if(m>0){ //m可用就继续延伸 cur++; m--; count=max(cur,count); }else{ //m不可用就将左边界定位到i-k的位置,并释放一个m m++; cur=1; } } } return count; } };

感觉有一个大致的思路,但是还差了一点,不过现在写代码有点思路了,不像之前写不出来就是一整段写不出来。

2.3 疑难问题 三、解法 class Solution { public: int longestOnes(vector<int>& nums, int k) { int n = nums.size(); int left = 0, lsum = 0, rsum = 0; int ans = 0; for (int right = 0; right < n; ++right) { rsum += 1 - nums[right]; while (lsum < rsum - k) { lsum += 1 - nums[left]; ++left; } ans = max(ans, right - left + 1); } return ans; } }; 作者:力扣官方题解 链接: leetcode /problems/max-consecutive-ones-iii/solutions/608931/zui-da-lian-xu-1de-ge-shu-iii-by-leetcod-hw12/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 四、收获 4.1 心得

官方解决的滑动窗口太优雅了

4.2 举一反三

滑动窗口的模板就是内外循环,两个指针,内循环一个不满足的窗口条件

标签:

1004.最大连续1的个数III由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“1004.最大连续1的个数III