LeetCode – Sliding Window Maximum (Java)

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.

Java Solution

public int[] maxSlidingWindow(int[] nums, int k) {
    if(nums==null||nums.length==0)
        return new int[0];
 
    int[] result = new int[nums.length-k+1];
 
    LinkedList<Integer> deque = new LinkedList<Integer>();
    for(int i=0; i<nums.length; i++){
        if(!deque.isEmpty()&&deque.peekFirst()==i-k) 
            deque.poll();
 
        while(!deque.isEmpty()&&nums[deque.peekLast()]<nums[i]){
            deque.removeLast();
        }    
 
        deque.offer(i);
 
        if(i+1>=k)
            result[i+1-k]=nums[deque.peek()];
    }
 
    return result;
}

10 thoughts on “LeetCode – Sliding Window Maximum (Java)”

  1. idea w/ deque is nice

    keep only relevant Maxs , killing Maxs before ( max_prev < max_next), so sorted

    and killing front Maxs in deque, if they are out of K positions

  2. elegant , but obv no need add. memory

    = find max for K first
    = each next element , update Max if

    if curr Max no more w/in k positions, again find max

  3. var arr = [1,3,-1,-3,5,3,6,7]
    var res = []
    var k = 3
    for(var i=k;i<=arr.length;i++){
    res.push(Math.max(…arr.slice(i-k,i)))
    }
    console.log(res)


  4. var arr = [1,3,-1,-3,5,3,6,7]
    var res = []
    var k = 3
    for(var i=k;i<=arr.length;i++){
    res.push(Math.max(...arr.slice(i-k,i)))
    }
    console.log(res)

Leave a Comment