和至少为k的最短子数组 python_和至少为k的最短子数组
// 單調棧
// 維護一個具有棧單調性的隊列,跟動態規劃不一樣的是時間復雜度為O(n)
// queue[i]中存放著前綴和
// 我們知道因為負數的存在,所以隊列不是單調增長的,但是不單調的其實對我們沒有用
// 因為肯定可以找到比它短的(因此我們移除比)
// opt(y)表示比固定的y最大的滿足條件的x,因此y - x的最大值就是我們要的值
// 這個遞增的隊列
// 我們首先建立一個單調增棧
// 出棧則代表碰到了合適的值。因此記錄大小
// 其實我更感覺是具有單調性質的滑動窗口呢。。。。。
func shortestSubarray(A []int, K int) int {
prefixSum := make([]int, len(A)+1)
shLen := math.MaxInt32
for i, a := range A {
prefixSum[i+1] = prefixSum[i] + a
}
queue := make([]int, 1, len(prefixSum))
for i := 1; i < len(prefixSum); i++ {
for len(queue) > 0 && prefixSum[queue[len(queue)-1]] >= prefixSum[i] {
queue = queue[:len(queue)-1]
}
queue = append(queue, i)
diff := prefixSum[queue[len(queue)-1]] - K
for len(queue) > 1 && diff >= prefixSum[queue[0]] {
l := i - queue[0]
if l < shLen {
shLen = l
}
queue = queue[1:]
}
}
if shLen == math.MaxInt32 {
return -1
}
return shLen
}
總結
以上是生活随笔為你收集整理的和至少为k的最短子数组 python_和至少为k的最短子数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python选项卡中文详细说明_pych
- 下一篇: 净迁移人口预测程序python_高质量深