38 lines
577 B
Go
38 lines
577 B
Go
package main
|
|
|
|
func ShortestSubarray(nums []int, k int) int {
|
|
if len(nums) == 0 {
|
|
return -1
|
|
}
|
|
|
|
wndSz := 1
|
|
wndStart := 0
|
|
|
|
wndEnd := 0
|
|
wndSum := 0
|
|
|
|
wndPrevInitialSum := 0
|
|
lenNums := len(nums)
|
|
|
|
for wndSz = 1; wndSz <= lenNums; wndSz++ {
|
|
|
|
wndSum = wndPrevInitialSum + nums[wndSz-1]
|
|
wndPrevInitialSum = wndSum
|
|
if wndSum >= k {
|
|
return wndSz
|
|
}
|
|
|
|
for wndStart = 1; (wndStart + wndSz - 1) < lenNums; wndStart++ {
|
|
|
|
wndEnd = wndStart + wndSz - 1
|
|
wndSum = wndSum - nums[wndStart-1] + nums[wndEnd]
|
|
|
|
if wndSum >= k {
|
|
return wndSz
|
|
}
|
|
}
|
|
}
|
|
|
|
return -1
|
|
}
|