LeetCode 862. 和至少為 K 的最短子數組
阿新 • • 發佈:2018-10-01
註意點 滑動窗口 turn 去掉 有意 min urn 移動 子數組
思路: 采用滑動窗口
註意點
- 左邊移動的時候,如果去掉的數是負數,那麽右邊遊標要做回滾;
- 右邊的遊標移動時,出現sum<=0,說明此次的計算沒有意義,不要再進行下去;
代碼
func shortestSubarray(A []int, K int) int { lA := len(A) sum := 0 j := 0 minL := -1 for i := 0; i < lA; i++ { if i >= 1 { sum -= A[i-1] // 回滾, 如果刪的是負數 if A[i-1] < 0 { for ; ; { if j >i { sum -= A[j-1] j -- if sum >= K { min := j - i if minL == -1 || (minL != -1&& min < minL) { minL = min } } } else { break } } } } // 此時夠的,那麽計算最小 if sum >= K { min := j - i if minL == -1 || (minL != -1&& min < minL) { minL = min } continue } for { if j >= lA || sum < 0 { break } sum += A[j] j ++ if sum >= K { min := j - i if minL == -1 || (minL != -1&& min < minL) { minL = min } break } } } return minL }
LeetCode 862. 和至少為 K 的最短子數組