Given a binary array
Example 1:
Input: nums = [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: nums = [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.
Constraints:
1 <= nums.length <= 105 nums[i] is either0 or1 .0 <= k <= nums.length
Solution
之前也有在 FB 的面試問到這題,可以用 sliding window 來解
關鍵的地方是要用個 counter 記錄目前已經用了幾個 0 了
如果 counter 小於零,那就要移動 left index,直到 counter 大於等於 0
kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
fun longestOnes(nums: IntArray, k: Int): Int { | |
var left = -1 | |
var ans = 0 | |
val map = mutableMapOf<Int,Int>() | |
var count = k | |
for(right in nums.indices) { | |
if(nums[right] == 0) { | |
--count | |
} | |
while(count < 0) { | |
++left | |
if(nums[left] == 0) { | |
++count | |
} | |
} | |
ans = Math.max(ans, right-left) | |
} | |
return ans | |
} | |
} |
沒有留言:
張貼留言