We were unable to load Disqus. If you are a moderator please see our troubleshooting guide.

Ashwin • 4 years ago

This will not work for the test case {9, 10, 9, -7, -4, -8, 2, -6} and K = 5

You can remove instead of poll but that would make the time complexity O(nK) which is bad because for large K it could be come O(n^2) which is the same as brute force solution. My suggestion is to use Deque:
int n = nums.length;
Deque<integer> deque = new LinkedList<>();
int[] result = new int[n - k + 1];
for (int i = 0; i < n; i++) {
while (!deque.isEmpty() && deque.peek() < i - k + 1) {
deque.pollFirst();
}

while (!deque.isEmpty() && nums[deque.peekLast()] <= nums[i]) {
deque.pollLast();
}
deque.offer(i);

if (i >= k - 1) {
result[i - k + 1] = nums[deque.peekFirst()];
}

}

return result;
}