題目說明
範例
Input: nums = [1,1,0,0,1,1,1,0,1], k = 2
Output: 7
解釋:可以將兩個 0 變成 1,得到長度為 7 的連續 1
Input: nums = [0,0,1,1,1,0,0], k = 0
Output: 3
Python 解法(滑動視窗)
def longestOnes(nums, k):
left = 0
for right in range(len(nums)):
if nums[right] == 0:
k -= 1
if k < 0:
if nums[left] == 0:
k += 1
left += 1
return len(nums) - left
Java 解法(滑動視窗)
class Solution {
public int longestOnes(int[] nums, int k) {
int left = 0;
for (int right = 0; right < nums.length; right++) {
if (nums[right] == 0) k--;
if (k < 0) {
if (nums[left] == 0) k++;
left++;
}
}
return nums.length - left;
}
}
Java vs Python 差異
• Python 用 for right in range(len(nums)),Java 用經典 for 循環
• Python 語法簡潔,Java 需要顯式操作索引
• 核心邏輯都是 滑動視窗維護最多 k 個 0
複雜度分析
• 時間複雜度:O(n),左右指針每個元素最多走一次
• 空間複雜度:O(1),只使用常數變數