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 { if len(nums) == 0 { return -1 } queue := &Queue{} queue2 := &Queue{} queue.initQueue(100000) queue2.initQueue(100000) for i, n := range nums { if i < len(nums) { queue.enqueue(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 { return wndSz } } t := queue queue = queue2 queue2 = t queue2.erase() } return -1 }