"Shortest Subarray with Sum at Least K" hard task No 862 fixed size sliding window version

This commit is contained in:
2022-02-17 00:56:39 +02:00
parent fc80ce3c07
commit afae42e3a2

View File

@@ -5,54 +5,32 @@ func ShortestSubarray(nums []int, k int) int {
return -1 return -1
} }
queue := [100000]int{} wndSz := 1
queue2 := [100000]int{} wndStart := 0
qIterator := &queue wndEnd := 0
q2Iterator := &queue2 wndSum := 0
t := qIterator
qEndPtr := -1
qBeginPtr := -1
q2EndPtr := -1
q2BeginPtr := -1
wndPrevInitialSum := 0
lenNums := len(nums) lenNums := len(nums)
for i, n := range nums { for wndSz = 1; wndSz <= lenNums; wndSz++ {
if i < lenNums {
qEndPtr++ wndSum = wndPrevInitialSum + nums[wndSz-1]
qIterator[qEndPtr] = n wndPrevInitialSum = wndSum
} if wndSum >= k {
if n >= k { return wndSz
return 1
}
} }
wndSz := 0 for wndStart = 1; (wndStart + wndSz - 1) < lenNums; wndStart++ {
i := 0
for wndSz = 2; wndSz <= lenNums; wndSz++ { wndEnd = wndStart + wndSz - 1
for i = wndSz - 1; i < lenNums; i++ { wndSum = wndSum - nums[wndStart-1] + nums[wndEnd]
qBeginPtr++
q2EndPtr++ if wndSum >= k {
q2Iterator[q2EndPtr] = qIterator[qBeginPtr] + nums[i]
if q2Iterator[q2EndPtr] >= k {
return wndSz return wndSz
} }
} }
t = qIterator
qIterator = q2Iterator
q2Iterator = t
qBeginPtr = q2BeginPtr
qEndPtr = q2EndPtr
q2BeginPtr = -1
q2EndPtr = -1
} }
return -1 return -1