Back to Leetcode Go

1004. Max Consecutive Ones III

website/content/ChapterFour/1000~1099/1004.Max-Consecutive-Ones-III.md

1.7.11.9 KB
Original Source

1004. Max Consecutive Ones III

题目

Given an array A of 0s and 1s, we may change up to K values from 0 to 1.

Return the length of the longest (contiguous) subarray that contains only 1s.

Example 1:


Input: A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
Output: 6
Explanation: 
[1,1,1,0,0,1,1,1,1,1,1]
Bolded numbers were flipped from 0 to 1.  The longest subarray is underlined.

Example 2:


Input: A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
Output: 10
Explanation: 
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
Bolded numbers were flipped from 0 to 1.  The longest subarray is underlined.

Note:

  • 1 <= A.length <= 20000
  • 0 <= K <= A.length
  • A[i] is 0 or 1

题目大意

这道题考察的是滑动窗口的问题。

给出一个数组,数组中元素只包含 0 和 1 。再给一个 K,代表能将 0 变成 1 的次数。要求出经过变换以后,1 连续的最长长度。

解题思路

按照滑动窗口的思路处理即可,不断的更新和维护最大长度。

代码

go

package leetcode

func longestOnes(A []int, K int) int {
	res, left, right := 0, 0, 0
	for left < len(A) {
		if right < len(A) && ((A[right] == 0 && K > 0) || A[right] == 1) {
			if A[right] == 0 {
				K--
			}
			right++
		} else {
			if K == 0 || (right == len(A) && K > 0) {
				res = max(res, right-left)
			}
			if A[left] == 0 {
				K++
			}
			left++
		}
	}
	return res
}

func max(a int, b int) int {
	if a > b {
		return a
	}
	return b
}


<div style="display: flex;justify-content: space-between;align-items: center;"> <p><a href="https://books.halfrost.com/leetcode/ChapterFour/1000~1099/1003.Check-If-Word-Is-Valid-After-Substitutions/">⬅️上一页</a></p> <p><a href="https://books.halfrost.com/leetcode/ChapterFour/1000~1099/1005.Maximize-Sum-Of-Array-After-K-Negations/">下一页➡️</a></p> </div>