diff --git a/Algorithms/1004. Max Consecutive Ones III/1004. Max Consecutive Ones III.go b/Algorithms/1004. Max Consecutive Ones III/1004. Max Consecutive Ones III.go new file mode 100644 index 00000000..fd48551b --- /dev/null +++ b/Algorithms/1004. Max Consecutive Ones III/1004. Max Consecutive Ones III.go @@ -0,0 +1,22 @@ +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 +} diff --git a/Algorithms/1004. Max Consecutive Ones III/1004. Max Consecutive Ones III_test.go b/Algorithms/1004. Max Consecutive Ones III/1004. Max Consecutive Ones III_test.go new file mode 100644 index 00000000..01e28d13 --- /dev/null +++ b/Algorithms/1004. Max Consecutive Ones III/1004. Max Consecutive Ones III_test.go @@ -0,0 +1,53 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question1004 struct { + para1004 + ans1004 +} + +// para 是参数 +// one 代表第一个参数 +type para1004 struct { + s []int + k int +} + +// ans 是答案 +// one 代表第一个答案 +type ans1004 struct { + one int +} + +func Test_Problem1004(t *testing.T) { + + qs := []question1004{ + + question1004{ + para1004{[]int{1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0}, 2}, + ans1004{6}, + }, + + question1004{ + para1004{[]int{0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1}, 3}, + ans1004{10}, + }, + + question1004{ + para1004{[]int{0, 0, 0, 1}, 4}, + ans1004{4}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 1004------------------------\n") + + for _, q := range qs { + _, p := q.ans1004, q.para1004 + fmt.Printf("【input】:%v 【output】:%v\n", p, longestOnes(p.s, p.k)) + } + fmt.Printf("\n\n\n") +} diff --git a/Algorithms/1004. Max Consecutive Ones III/README.md b/Algorithms/1004. Max Consecutive Ones III/README.md new file mode 100644 index 00000000..97a2b845 --- /dev/null +++ b/Algorithms/1004. Max Consecutive Ones III/README.md @@ -0,0 +1,44 @@ +# [1004. Max Consecutive Ones III](https://leetcode.com/problems/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: + +```c +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: + +```c +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 连续的最长长度。 + +按照滑动窗口的思路处理即可,不断的更新和维护最大长度。