- 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;
}
}
110111 current_max = 1
110111 current_max = 2
110111 current_max = 0
110111 current_max = 1
110111 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.