diff --git a/862-shortest-subarray-with-sum-at-least-k.go b/862-shortest-subarray-with-sum-at-least-k.go index 93034ba..29787e3 100644 --- a/862-shortest-subarray-with-sum-at-least-k.go +++ b/862-shortest-subarray-with-sum-at-least-k.go @@ -1,74 +1,58 @@ package main -type Queue struct { - front int - rear int - size int - queue [100000]int -} - -func (q *Queue) initQueue(size int) { - q.size = size - q.front = -1 - q.rear = -1 -} - -func (q *Queue) enqueue(value int) { - if q.rear == q.size-1 { - return - } else { - q.rear++ - q.queue[q.rear] = value - } -} - -func (q *Queue) dequeue() int { - var x int = -1 - if q.front != q.rear { - q.front++ - x = q.queue[q.front] - } - return x -} - -func (q *Queue) erase() { - q.front = -1 - q.rear = -1 -} - func ShortestSubarray(nums []int, k int) int { if len(nums) == 0 { return -1 } - queue := &Queue{} - queue2 := &Queue{} + queue := [100000]int{} + queue2 := [100000]int{} - queue.initQueue(100000) - queue2.initQueue(100000) + qIterator := &queue + q2Iterator := &queue2 + + t := qIterator + + qEndPtr := -1 + qBeginPtr := -1 + + q2EndPtr := -1 + q2BeginPtr := -1 + + lenNums := len(nums) for i, n := range nums { - if i < len(nums) { - queue.enqueue(n) + if i < lenNums { + qEndPtr++ + qIterator[qEndPtr] = n } if n >= k { return 1 } } - for wndSz := 2; wndSz <= len(nums); wndSz++ { - for i := wndSz - 1; i < len(nums); i++ { - el := queue.dequeue() - s := el + nums[i] - queue2.enqueue(s) - if s >= k { + wndSz := 0 + i := 0 + + 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 { return wndSz } } - t := queue - queue = queue2 - queue2 = t - queue2.erase() + + t = qIterator + qIterator = q2Iterator + q2Iterator = t + + qBeginPtr = q2BeginPtr + qEndPtr = q2EndPtr + + q2BeginPtr = -1 + q2EndPtr = -1 } return -1