★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝()➤GitHub地址:➤原文地址: ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★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 = 2Output: 6Explanation: [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 = 3Output: 10Explanation: [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]
is0
or1
给定一个由若干 0
和 1
组成的数组 A
,我们最多可以将 K
个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
示例 1:
输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:10解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 10。
提示:
1 <= A.length <= 20000
0 <= K <= A.length
A[i]
为0
或1
428ms
1 class Solution { 2 func longestOnes(_ A: [Int], _ K: Int) -> Int { 3 var left = 0, right = 0, res = 0, zeroCount = 0 4 5 while right < A.count { 6 if A[right] == 0 { zeroCount += 1 } 7 right += 1 8 while(zeroCount > K) { 9 if A[left] == 0 { zeroCount -= 1 }10 left += 111 } 12 res = max(right - left, res)13 } 14 return res15 }16 }
432ms
1 class Solution { 2 func longestOnes(_ A: [Int], _ K: Int) -> Int { 3 var i = 0, k = K 4 var result = 0 5 for j in 0..
460ms
1 class Queue: CustomDebugStringConvertible, CustomStringConvertible { 2 private var storage: Array 3 4 private var head = 0 5 private var last = 0 6 7 init(_ capacity: Int) { 8 storage = Array() 9 storage.reserveCapacity(capacity)10 }11 12 func isEmpty() -> Bool {13 return head == last14 }15 16 func push(_ val: T) {17 storage.append(val)18 last += 119 }20 21 func pop() -> T {22 head += 123 24 return storage[head - 1]25 }26 27 func forEach(_ block: (T)->Void) {28 for i in head.. T {34 return storage[head]35 }36 37 func count() -> Int {38 return last - head39 }40 41 var description: String {42 return debugDescription43 }44 45 var debugDescription: String {46 var str = "["47 forEach { str += "\($0)," }48 str += "]"49 return str50 }51 }52 53 54 class Solution {55 func longestOnes(_ A: [Int], _ K: Int) -> Int {56 57 let queue = Queue (A.count)58 var current = 059 var ans = 060 61 for i in A.indices {62 if A[i] > 0 {63 current += 164 } else if queue.count() < K {65 current += 166 queue.push(i)67 } else if K > 0{68 current = i - queue.pop()69 queue.push(i)70 }71 72 ans = max(ans, current)73 }74 75 return ans76 }77 }
Runtime: 476 ms
Memory Usage: 18.9 MB
1 class Solution { 2 func longestOnes(_ A: [Int], _ K: Int) -> Int { 3 var res:Int = 0 4 var zero:Int = 0 5 var left:Int = 0 6 for right in 0..K)13 {14 if A[left] == 015 {16 zero -= 117 }18 left += 119 }20 res = max(res, right - left + 1)21 }22 return res 23 }24 }
Runtime: 576 ms
Memory Usage: 18.9 MB
1 class Solution { 2 func longestOnes(_ A: [Int], _ K: Int) -> Int { 3 var n:Int = A.count 4 var pre:[Int] = [Int](repeating:0,count:n) 5 for i in 0..= 027 {28 val -= pre[i]29 }30 if val <= K31 {32 ans = mid33 lo = mid + 134 }35 else36 {37 hi = mid - 138 } 39 }40 fans = max(fans, ans - i)41 }42 return fans 43 }44 }