"Shortest Subarray with Sum at Least K" hard task No 862 queue version improvement
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user