"Shortest Subarray with Sum at Least K" hard task No 862 queue version improvement

This commit is contained in:
2022-02-16 23:11:54 +02:00
parent cbdd216840
commit fc80ce3c07

View File

@@ -1,74 +1,58 @@
package main 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 { func ShortestSubarray(nums []int, k int) int {
if len(nums) == 0 { if len(nums) == 0 {
return -1 return -1
} }
queue := &Queue{} queue := [100000]int{}
queue2 := &Queue{} queue2 := [100000]int{}
queue.initQueue(100000) qIterator := &queue
queue2.initQueue(100000) q2Iterator := &queue2
t := qIterator
qEndPtr := -1
qBeginPtr := -1
q2EndPtr := -1
q2BeginPtr := -1
lenNums := len(nums)
for i, n := range nums { for i, n := range nums {
if i < len(nums) { if i < lenNums {
queue.enqueue(n) qEndPtr++
qIterator[qEndPtr] = n
} }
if n >= k { if n >= k {
return 1 return 1
} }
} }
for wndSz := 2; wndSz <= len(nums); wndSz++ { wndSz := 0
for i := wndSz - 1; i < len(nums); i++ { i := 0
el := queue.dequeue()
s := el + nums[i] for wndSz = 2; wndSz <= lenNums; wndSz++ {
queue2.enqueue(s) for i = wndSz - 1; i < lenNums; i++ {
if s >= k { qBeginPtr++
q2EndPtr++
q2Iterator[q2EndPtr] = qIterator[qBeginPtr] + nums[i]
if q2Iterator[q2EndPtr] >= k {
return wndSz return wndSz
} }
} }
t := queue
queue = queue2 t = qIterator
queue2 = t qIterator = q2Iterator
queue2.erase() q2Iterator = t
qBeginPtr = q2BeginPtr
qEndPtr = q2EndPtr
q2BeginPtr = -1
q2EndPtr = -1
} }
return -1 return -1