思路
滑动窗口,一次通过!
public int longestOnes(int[] nums, int k) {
int maxL = 0;
int start = 0;
int end = 0;
int cnt = 0;
while (end < nums.length)
{
if (nums[end] == 0)
cnt++;
while (cnt > k)
{
if (nums[start] == 0)
cnt--;
start++;
}
maxL = maxL > end - start + 1 ? maxL : end - start + 1;
end++;
}
return maxL;
}
类似题目1208. 尽可能使字符串相等
public static int equalSubstring(String s, String t, int maxCost) {
int min = Integer.MAX_VALUE;
int n = s.length();
int start = 0;
int end = 0;
int sum = 0;
while (end < n)
{
sum += Math.abs(s.charAt(end) - t.charAt(end));
while (sum > maxCost)
{
sum -= Math.abs(s.charAt(start) - t.charAt(start));
start++;
}
min = min < end - start + 1 ? min : end - start + 1;
end++;
}
return min;
}