最大連續1的個數 III

2022-05-16 06:22:20 字數 936 閱讀 3971

給定乙個由若干01組成的陣列a,我們最多可以將k個值從 0 變成 1 。

返回僅包含 1 的最長(連續)子陣列的長度。

重點:題意轉換。把「最多可以把 k 個 0 變成 1,求僅包含 1 的最長子陣列的長度」轉換為 「找出乙個最長的子陣列,該子陣列內最多允許有 k 個 0 」。

經過上面的題意轉換,我們可知本題是求最大連續子區間,可以使用滑動視窗方法。滑動視窗的限制條件是:視窗內最多有 k 個 0。

可以使用我多次分享的滑動視窗模板解決,模板在**之後。

**思路:

使用 left 和 right 兩個指標,分別指向滑動視窗的左右邊界。

right 主動右移:right 指標每次移動一步。當 a[right] 為 0,說明滑動視窗內增加了乙個 0;

left 被動右移:判斷此時視窗內 0 的個數,如果超過了 k,則 left 指標被迫右移,直至視窗內的 0 的個數小於等於 k 為止。

滑動視窗長度的最大值就是所求。

示例以 a= [1,1,1,0,0,0,1,1,1,1,0], k = 2 為例,下面的**演示了滑動視窗的兩個指標的移動情況。

package main

import "fmt"

func slide_windows(num int, k int) (ans int)

sss := right - left + 1

ans = max(ans, sss)

} return

}func max(x, y int) int

return y

}func main()

k := 2

res := slide_windows(a, k)

fmt.println(res)

}

1004 最大連續1的個數 III

題目描述 給定乙個由若干 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,...

1004 最大連續1的個數 III

自己的做法很麻煩並且時間複雜度高,最壞o n 2 o n 2 o n2 原因是沒有想到去數學推導,一步一步去想很費勁,應該改掉這個毛病。想到了二分的做法,但是寫麻煩了,首先統計了所有0塊所在的初始位置和個數,記為陣列a,然後遍歷所有的地方去填充0,這個時候就不能方便的從a中得到填充到哪為止,從而陷入...

1004 最大連續1的個數III

題目描述 給定乙個由若干 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,...