diff --git a/862-shortest-subarray-with-sum-at-least-k.go b/862-shortest-subarray-with-sum-at-least-k.go index 6ee31fb..d0708ce 100644 --- a/862-shortest-subarray-with-sum-at-least-k.go +++ b/862-shortest-subarray-with-sum-at-least-k.go @@ -5,32 +5,56 @@ func ShortestSubarray(nums []int, k int) int { return -1 } - wndSz := 1 - wndStart := 0 + queue := [100000]int{} + queue2 := [100000]int{} - wndEnd := 0 - wndSum := 0 + qIterator := &queue + q2Iterator := &queue2 + + t := qIterator + + qEndPtr := -1 + qBeginPtr := -1 + + q2EndPtr := -1 + q2BeginPtr := -1 - wndPrevInitialSum := 0 lenNums := len(nums) + nums2 := [100000]int{} - for wndSz = 1; wndSz <= lenNums; wndSz++ { + for i, n := range nums { + qEndPtr++ + qIterator[qEndPtr] = n - wndSum = wndPrevInitialSum + nums[wndSz-1] - wndPrevInitialSum = wndSum - if wndSum >= k { - return wndSz + nums2[i] = n + + if n >= k { + return 1 } + } - for wndStart = 1; (wndStart + wndSz - 1) < lenNums; wndStart++ { + wndSz := 0 + i := 0 - wndEnd = wndStart + wndSz - 1 - wndSum = wndSum - nums[wndStart-1] + nums[wndEnd] - - if wndSum >= k { + for wndSz = 2; wndSz <= lenNums; wndSz++ { + for i = wndSz - 1; i < lenNums; i++ { + qBeginPtr++ + q2EndPtr++ + q2Iterator[q2EndPtr] = qIterator[qBeginPtr] + nums2[i] + if q2Iterator[q2EndPtr] >= k { return wndSz } } + + t = qIterator + qIterator = q2Iterator + q2Iterator = t + + qBeginPtr = q2BeginPtr + qEndPtr = q2EndPtr + + q2BeginPtr = -1 + q2EndPtr = -1 } return -1