- Published on
Leetcode 485 - Max Consecutive Ones solution
- Authors
- Name
- Imran Pollob
- Website
- @pollmix
Solution one:
The idea here is to maintain two variables at the same time. current_max
stores the maximum occurrences of 1
and maximum
just stores the max value of current_max
variable.
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
maximum = 0
current_max = 0
for i in nums:
if i == 1:
current_max += 1
maximum = max(maximum, current_max)
else:
current_max = 0
return maximum
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int high = 0;
int cur = 0;
for(int i : nums){
if(i == 1)
cur += 1;
else
cur = 0;
high = Math.max(high, cur);
}
return high;
}
}
1
10111 current_max = 1
11
0111 current_max = 2
110
111 current_max = 0
1101
11 current_max = 1
11011
1 current_max = 2
110111
current_max = 3
Solution Two:
Faster than the previous approach because max
fucntion is not running all the times.
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int high = 0;
int cur = 0;
for(int i : nums){
if(i == 1){
cur += 1;
} else{
high = Math.max(high, cur);
cur = 0;
}
}
// if last element is one
high = Math.max(high, cur);
return high;
}
}
Solution Three:
For O(n) space we can reassign values to the input array.
class Solution:
def findMaxConsecutiveOnes(self, nums):
for i in range(1, len(nums)):
if nums[i]:
nums[i] += nums[i - 1]
return max(nums)
Transform the input eg: [0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1]
to [0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 3, 4]
and return the max element.