1004. Max Consecutive Ones III
count zero
T: O(n)
S: O(1)
class Solution {
public int longestOnes(int[] nums, int k) {
int zeroCount = 0;
int left = 0;
int right = 0;
int result = 0;
while (right < nums.length) {
if (nums[right] == 0) {
zeroCount++;
}
right++;
if (zeroCount <= k) {
result = Math.max(result, right - left);
}
while (zeroCount > k) {
if (nums[left] == 0) {
zeroCount--;
}
left++;
}
}
return result;
}
}
/*
when match or lower k zero -> get ans,
when over k zero, start to shrink left
[1,1,1,0,0,0,1,1,1,1,0]
l
r
[1,1,1,0,1,1,1,1,1,1,1] zerocount < k 時 or zerocount == k 時. 都要計算
*/
count one
class Solution {
public int longestOnes(int[] nums, int k) {
int oneCount = 0;
int left = 0;
int right = 0;
int result = 0;
while (right < nums.length) {
if (nums[right] == 1) {
oneCount++;
}
right++;
while (right - left - oneCount > k) {
if (nums[left] == 1) {
oneCount--;
}
left++;
}
result = Math.max(result, right - left);
}
return result;
}
}
/*
另一個方向思路, count one
[1,1,1,0,0,0,1,1,1,1,0]
l
r
總長 - oneCount (也就是 zeroCount) <= k -> ok 的 -> 算結果
總長 - oneCount (也就是 zeroCount) > k (代表太長了, 要 shrink left)
*/
Last updated