java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846
1. 法一,双指针
首先用left指针,定位到一个含有1的子区间左边界,然后让right从left位置尝试找到这个子区间的右边界 如果已经完成了一个子区间的统计,数组还没有遍历完,让left从right的位置,继续。 类似一个滑动窗格
class Solution { public int findMaxConsecutiveOnes ( int [ ] nums) { int left= 0 , right = 0 ; int n = nums. length; int ans = 0 ; for ( left = 0 ; left< n; left++ ) { if ( nums[ left] == 1 ) { for ( right = left; right< n&& nums[ right] == 1 ; right++ ) ; ans = Math . max ( right- left, ans) ; left = right; } } return ans; }
}
2. 法二:变量计数
和双指针类似,当我们发现一个1后,用count变量开始统计个数。如果一个区间统计完成后,数组没有遍历完成,那么记录当前count和已经记录的count谁大,然后count归0重新开始统计下一个区间。
class Solution { public int findMaxConsecutiveOnes ( int [ ] nums) { int ans = 0 , count = 0 ; int n = nums. length; for ( int i = 0 ; i< n; i++ ) { if ( nums[ i] == 1 ) count++ ; else { ans = Math . max ( ans, count) ; count = 0 ; } } ans = Math . max ( ans, count) ; return ans; }
}