LeetCode 862. 和至少为 K 的最短子数组
Posted fall12
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 862. 和至少为 K 的最短子数组相关的知识,希望对你有一定的参考价值。
思路: 采用滑动窗口
注意点
- 左边移动的时候,如果去掉的数是负数,那么右边游标要做回滚;
- 右边的游标移动时,出现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 的最短子数组的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 862 和至少为K的最短子数组[前缀和 双端队列] HERODING的LeetCode之路
力扣 每日一题 862. 和至少为 K 的最短子数组难度:困难,rating: 2306(前缀和+单调队列)
力扣 每日一题 862. 和至少为 K 的最短子数组难度:困难,rating: 2306(前缀和+单调队列)