leetcode485. 最大连续 1 的个数
思路:【双指针】
left左边界,right往右跑遇到0,则计算该长度。并更新cnt(最大连续1个数)。
class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int left = 0, right = 0;int cnt = 0;while (left != nums.size()) {if (nums[left] == 0) {left++;continue;}right = left;while (right != nums.size()) {if (nums[right] == 0) {int t = right - left;if (t > cnt) {cnt = t;}left = right;break;}right++;}if (right == nums.size()) {int t = right - left;if (t > cnt) {cnt = t;}break;}}return cnt;}
};
emmm怎么看答案一次遍历就可以完成呢?
思路:一次遍历
设置两个变量,cnt记录当前小区间的 1 的个数,然后maxcnt记录整个nums数组的 1 的个数(结束一个小区间,满足条件就更新一下)
代码
class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int count = 0, maxCount = 0;for (int i = 0; i < nums.size(); i++) {if (nums[i] == 1) {count++;}else {maxCount = max(count, maxCount);count = 0;}}maxCount = max(count, maxCount);return maxCount;}
};
Java 代码
class Solution {public int findMaxConsecutiveOnes(int[] nums) {int cnt = 0, maxcnt = 0;for(int i = 0; i < nums.length; i++){if(nums[i] == 1){cnt++;}else{maxcnt = Math.max(cnt, maxcnt);cnt = 0;}}maxcnt = Math.max(cnt, maxcnt);return maxcnt;}
}