2
* @param {number[]} nums6
var DoublyLinkedList = function (sum = "DUMMY", index = "DUMMY") {7
this.property = { sum, index };12
DoublyLinkedList.prototype.deque = function () {13
const dequeNode = this.next;15
this.next = dequeNode.next;16
dequeNode.next.prev = this;18
dequeNode.next = null;19
dequeNode.prev = null;23
DoublyLinkedList.prototype.pop = function () {24
const dequeNode = this.prev;26
this.prev = dequeNode.prev;27
dequeNode.prev.next = this;29
dequeNode.next = null;30
dequeNode.prev = null;34
DoublyLinkedList.prototype.push = function (node) {35
const prev = this.prev;45
var shortestSubarray = function (nums, k) {47
// Initalize 3 vaiables :- sum = 0, subArrayLength = Infinity, queue -> []49
const dummyHead = new DoublyLinkedList();50
const dummyTail = new DoublyLinkedList();51
dummyHead.next = dummyTail;52
dummyTail.prev = dummyHead;56
let subArraySize = Number.MAX_SAFE_INTEGER;58
for (let i = 0; i < nums.length; i++) {61
// Gives one possible answer, if sum is greater than or63
if (sum >= k) subArraySize = Math.min(subArraySize, i + 1);67
// Reduce the queue from left till the sum of elements from68
// first index of queue till last index of queue is less than k69
// Each time we constantly update the lastdequeued element70
// As the last lastdequeued will satisfy sum - lastDequeued.sum >= k71
// Thus the range would be i-lastDequeued.property.index72
// (without lastDequeued.property.index)73
while (queueSize > 0 && sum - dummyHead.next.property.sum >= k) {75
lastDequeued = dummyHead.deque();78
// Using the lastDequeued value to check79
if (lastDequeued !== undefined) {80
subArraySize = Math.min(subArraySize, i - lastDequeued.property.index);83
// Maintaining the monotonic queue84
while (queueSize > 0 && sum <= dummyTail.prev.property.sum) {89
const newNode = new DoublyLinkedList(sum, i);91
dummyTail.push(newNode);94
return subArraySize === Number.MAX_SAFE_INTEGER ? -1 : subArraySize;