From afae42e3a25a429ebb2396d51853c597cd291c9d Mon Sep 17 00:00:00 2001 From: Rostislav Kuratch Date: Thu, 17 Feb 2022 00:56:39 +0200 Subject: [PATCH] "Shortest Subarray with Sum at Least K" hard task No 862 fixed size sliding window version --- 862-shortest-subarray-with-sum-at-least-k.go | 56 ++++++-------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/862-shortest-subarray-with-sum-at-least-k.go b/862-shortest-subarray-with-sum-at-least-k.go index 29787e3..6ee31fb 100644 --- a/862-shortest-subarray-with-sum-at-least-k.go +++ b/862-shortest-subarray-with-sum-at-least-k.go @@ -5,54 +5,32 @@ func ShortestSubarray(nums []int, k int) int { return -1 } - queue := [100000]int{} - queue2 := [100000]int{} + wndSz := 1 + wndStart := 0 - qIterator := &queue - q2Iterator := &queue2 - - t := qIterator - - qEndPtr := -1 - qBeginPtr := -1 - - q2EndPtr := -1 - q2BeginPtr := -1 + wndEnd := 0 + wndSum := 0 + wndPrevInitialSum := 0 lenNums := len(nums) - for i, n := range nums { - if i < lenNums { - qEndPtr++ - qIterator[qEndPtr] = n - } - if n >= k { - return 1 - } - } + for wndSz = 1; wndSz <= lenNums; wndSz++ { - wndSz := 0 - i := 0 + wndSum = wndPrevInitialSum + nums[wndSz-1] + wndPrevInitialSum = wndSum + if wndSum >= k { + return wndSz + } - for wndSz = 2; wndSz <= lenNums; wndSz++ { - for i = wndSz - 1; i < lenNums; i++ { - qBeginPtr++ - q2EndPtr++ - q2Iterator[q2EndPtr] = qIterator[qBeginPtr] + nums[i] - if q2Iterator[q2EndPtr] >= k { + for wndStart = 1; (wndStart + wndSz - 1) < lenNums; wndStart++ { + + wndEnd = wndStart + wndSz - 1 + wndSum = wndSum - nums[wndStart-1] + nums[wndEnd] + + if wndSum >= k { return wndSz } } - - t = qIterator - qIterator = q2Iterator - q2Iterator = t - - qBeginPtr = q2BeginPtr - qEndPtr = q2EndPtr - - q2BeginPtr = -1 - q2EndPtr = -1 } return -1