5252
5353### 方法一:一次遍历
5454
55- 遍历数组,记录当前连续 $1$ 的个数 ` cnt ` ,以及最大连续 $1$ 的个数 ` ans ` 。如果当前元素为 $1$,则 ` cnt++ ` ,否则更新 ` ans ` ,并且 ` cnt=0 ` 。最后返回 ` max(ans, cnt) ` 即可 。
55+ 我们可以遍历数组,用一个变量 $\textit{cnt}$ 记录当前连续的 1 的个数,用另一个变量 $\textit{ ans}$ 记录最大连续 1 的个数 。
5656
57- 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 ` nums ` 的长度。
57+ 当遍历到一个 1 时,将 $\textit{cnt}$ 加一,然后更新 $\textit{ans}$ 的值为 $\textit{cnt}$ 和 $\textit{ans}$ 本身的最大值,即 $\textit{ans} = \max(\textit{ans}, \textit{cnt})$。否则,将 $\textit{cnt}$ 重置为 0。
58+
59+ 遍历结束后,返回 $\textit{ans}$ 的值即可。
60+
61+ 时间复杂度 $O(n)$,其中 $n$ 为数组的长度。空间复杂度 $O(1)$。
5862
5963<!-- tabs:start -->
6064
@@ -63,31 +67,30 @@ tags:
6367``` python
6468class Solution :
6569 def findMaxConsecutiveOnes (self , nums : List[int ]) -> int :
66- cnt = ans = 0
67- for v in nums:
68- if v == 1 :
70+ ans = cnt = 0
71+ for x in nums:
72+ if x :
6973 cnt += 1
70- else :
7174 ans = max (ans, cnt)
75+ else :
7276 cnt = 0
73- return max ( ans, cnt)
77+ return ans
7478```
7579
7680#### Java
7781
7882``` java
7983class Solution {
8084 public int findMaxConsecutiveOnes (int [] nums ) {
81- int cnt = 0 , ans = 0 ;
82- for (int v : nums) {
83- if (v == 1 ) {
84- ++ cnt;
85+ int ans = 0 , cnt = 0 ;
86+ for (int x : nums) {
87+ if (x == 1 ) {
88+ ans = Math . max(ans, ++ cnt) ;
8589 } else {
86- ans = Math . max(ans, cnt);
8790 cnt = 0 ;
8891 }
8992 }
90- return Math . max(cnt, ans) ;
93+ return ans;
9194 }
9295}
9396```
@@ -98,52 +101,49 @@ class Solution {
98101class Solution {
99102public:
100103 int findMaxConsecutiveOnes(vector<int >& nums) {
101- int cnt = 0, ans = 0;
102- for (int v : nums) {
103- if (v == 1 ) {
104- ++cnt;
104+ int ans = 0, cnt = 0;
105+ for (int x : nums) {
106+ if (x ) {
107+ ans = max(ans, ++cnt) ;
105108 } else {
106- ans = max(ans, cnt);
107109 cnt = 0;
108110 }
109111 }
110- return max( ans, cnt) ;
112+ return ans;
111113 }
112114};
113115```
114116
115117#### Go
116118
117119```go
118- func findMaxConsecutiveOnes(nums []int) int {
119- ans, cnt := 0, 0
120- for _, v := range nums {
121- if v == 1 {
120+ func findMaxConsecutiveOnes(nums []int) (ans int) {
121+ cnt := 0
122+ for _, x := range nums {
123+ if x == 1 {
122124 cnt++
123- } else {
124125 ans = max(ans, cnt)
126+ } else {
125127 cnt = 0
126128 }
127129 }
128- return max(ans, cnt)
130+ return
129131}
130132```
131133
132134#### TypeScript
133135
134136``` ts
135137function findMaxConsecutiveOnes(nums : number []): number {
136- let res = 0 ;
137- let count = 0 ;
138- for (const num of nums ) {
139- if (num === 0 ) {
140- res = Math .max (res , count );
141- count = 0 ;
138+ let [ans, cnt] = [0 , 0 ];
139+ for (const x of nums ) {
140+ if (x ) {
141+ ans = Math .max (ans , ++ cnt );
142142 } else {
143- count ++ ;
143+ cnt = 0 ;
144144 }
145145 }
146- return Math . max ( res , count ) ;
146+ return ans ;
147147}
148148```
149149
@@ -152,17 +152,19 @@ function findMaxConsecutiveOnes(nums: number[]): number {
152152``` rust
153153impl Solution {
154154 pub fn find_max_consecutive_ones (nums : Vec <i32 >) -> i32 {
155- let mut res = 0 ;
156- let mut count = 0 ;
157- for num in nums {
158- if num == 0 {
159- res = res . max (count );
160- count = 0 ;
155+ let mut ans = 0 ;
156+ let mut cnt = 0 ;
157+
158+ for & x in nums . iter () {
159+ if x == 1 {
160+ cnt += 1 ;
161+ ans = ans . max (cnt );
161162 } else {
162- count += 1 ;
163+ cnt = 0 ;
163164 }
164165 }
165- res . max (count )
166+
167+ ans
166168 }
167169}
168170```
@@ -175,17 +177,15 @@ impl Solution {
175177 * @return {number}
176178 */
177179var findMaxConsecutiveOnes = function (nums ) {
178- let res = 0 ,
179- t = 0 ;
180- for (let num of nums) {
181- if (num == 1 ) {
182- ++ t;
180+ let [ans, cnt] = [0 , 0 ];
181+ for (const x of nums) {
182+ if (x) {
183+ ans = Math .max (ans, ++ cnt);
183184 } else {
184- res = Math .max (res, t);
185- t = 0 ;
185+ cnt = 0 ;
186186 }
187187 }
188- return Math . max (res, t) ;
188+ return ans ;
189189};
190190```
191191
@@ -198,16 +198,18 @@ class Solution {
198198 * @return Integer
199199 */
200200 function findMaxConsecutiveOnes($nums) {
201- $tmp = $max = 0;
202- for ($i = 0; $i < count($nums); $i++) {
203- if ($nums[$i] == 1) {
204- $tmp++;
201+ $ans = $cnt = 0;
202+
203+ foreach ($nums as $x) {
204+ if ($x == 1) {
205+ $cnt += 1;
206+ $ans = max($ans, $cnt);
205207 } else {
206- $max = max($tmp, $max);
207- $tmp = 0;
208+ $cnt = 0;
208209 }
209210 }
210- return max($tmp, $max);
211+
212+ return $ans;
211213 }
212214}
213215```
0 commit comments