"Shortest Subarray with Sum at Least K" hard task No 862 solution using 2 queues, still failing by time complexity

This commit is contained in:
2022-02-16 21:05:55 +02:00
parent 4b589f5272
commit 71ac4f11a8

View File

@@ -1,44 +1,81 @@
package main package main
import "fmt"
type Queue struct {
front int
rear int
size int
QArray [100000]int
}
func (q *Queue) initQueue(size int) {
q.size = size
//q.QArray = [size]int{}
q.front = -1
q.rear = -1
}
func (q *Queue) enqueue(value int) {
if q.rear == q.size-1 {
fmt.Println("Queue is Full")
return
} else {
q.rear++
q.QArray[q.rear] = value
}
}
func (q *Queue) dequeue() int {
var x int = -1
if q.front == q.rear {
fmt.Println("Queue is Empty!")
} else {
q.front++
x = q.QArray[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
} }
sz := 999999 queue := &Queue{}
sum := nums[0] queue2 := &Queue{}
carry := 1
for i := 0; i < len(nums)-1; i++ { queue.initQueue(100000)
if sum >= k { queue2.initQueue(100000)
if (carry > 0) && (sz > carry) {
sz = carry for i, n := range nums {
} if i < len(nums) {
} queue.enqueue(n)
sum = nums[i]
for j := i + 1; j < len(nums); j++ {
if sum >= k {
if sz > (j - i) {
sz = j - i
}
break
} else {
sum += nums[j]
carry = j - i + 1
} }
if n >= k {
return 1
} }
} }
if sz == 999999 { for wndSz := 2; wndSz <= len(nums); wndSz++ {
if sum >= k { for i := wndSz - 1; i < len(nums); i++ {
return carry el := queue.dequeue()
s := el + nums[i]
queue2.enqueue(s)
if s >= k {
return wndSz
} }
}
t := queue
queue = queue2
queue2 = t
queue2.erase()
}
return -1 return -1
} }
if (sum >= k) && (carry > 0) && (carry < sz) {
return carry
}
return sz
}