diff --git a/862-shortest-subarray-with-sum-at-least-k.go b/862-shortest-subarray-with-sum-at-least-k.go index d0708ce..0b221d2 100644 --- a/862-shortest-subarray-with-sum-at-least-k.go +++ b/862-shortest-subarray-with-sum-at-least-k.go @@ -5,57 +5,28 @@ func ShortestSubarray(nums []int, k int) int { return -1 } - queue := [100000]int{} - queue2 := [100000]int{} + sz := 999999 + prefix := make([]int, len(nums)+1) - qIterator := &queue - q2Iterator := &queue2 - - t := qIterator - - qEndPtr := -1 - qBeginPtr := -1 - - q2EndPtr := -1 - q2BeginPtr := -1 - - lenNums := len(nums) - nums2 := [100000]int{} - - for i, n := range nums { - qEndPtr++ - qIterator[qEndPtr] = n - - nums2[i] = n - - if n >= k { - return 1 - } + for i := 1; i <= len(nums); i++ { + prefix[i] = prefix[i-1] + nums[i-1] } - wndSz := 0 - i := 0 - - 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 + for i := 0; i < len(nums); i++ { + for j := i; j < len(nums); j++ { + sum := prefix[j+1] - prefix[i] + if sum >= k { + l := j - i + 1 + if sz > l { + sz = l + } } } - - t = qIterator - qIterator = q2Iterator - q2Iterator = t - - qBeginPtr = q2BeginPtr - qEndPtr = q2EndPtr - - q2BeginPtr = -1 - q2EndPtr = -1 } - return -1 + if sz == 999999 { + sz = -1 + } + + return sz }