iT邦幫忙

2025 iThome 鐵人賽

0

題目說明

  1. Max Consecutive Ones III
    給你一個二元陣列 nums(只包含 0 和 1)和一個整數 k,
    允許你把最多 k 個 0 變成 1,請返回 變換後最大連續 1 的長度。

範例

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),只使用常數變數


上一篇
day 26 Search Insert Position
下一篇
day 28 Squares of a Sorted Array
系列文
不熟程式的我在leetcode打滾30天30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言