45 lines
596 B
Go
45 lines
596 B
Go
package main
|
|
|
|
func ShortestSubarray(nums []int, k int) int {
|
|
if len(nums) == 0 {
|
|
return -1
|
|
}
|
|
|
|
sz := 999999
|
|
sum := nums[0]
|
|
carry := 1
|
|
|
|
for i := 0; i < len(nums)-1; i++ {
|
|
if sum >= k {
|
|
if (carry > 0) && (sz > carry) {
|
|
sz = carry
|
|
}
|
|
}
|
|
sum = nums[i]
|
|
for j := i + 1; j < len(nums); j++ {
|
|
if sum >= k {
|
|
if sz > (j - i) {
|
|
sz = j - i
|
|
}
|
|
break
|
|
} else {
|
|
sum += nums[j]
|
|
carry = j - i + 1
|
|
}
|
|
}
|
|
}
|
|
|
|
if sz == 999999 {
|
|
if sum >= k {
|
|
return carry
|
|
}
|
|
return -1
|
|
}
|
|
|
|
if (sum >= k) && (carry > 0) && (carry < sz) {
|
|
return carry
|
|
}
|
|
|
|
return sz
|
|
}
|