Leetcode 239 Sliding Window Maximum

来源:互联网 发布:js 动态仪表盘 编辑:程序博客网 时间:2024/05/16 17:39

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.

For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.

Window position                Max---------------               -----[1  3  -1] -3  5  3  6  7       3 1 [3  -1  -3] 5  3  6  7       3 1  3 [-1  -3  5] 3  6  7       5 1  3  -1 [-3  5  3] 6  7       5 1  3  -1  -3 [5  3  6] 7       6 1  3  -1  -3  5 [3  6  7]      7

Therefore, return the max sliding window as [3,3,5,5,6,7].

滑动窗口的问题。需要留下window里面的最大值。

可以用LinkedList来实现

public class Solution {    public int[] maxSlidingWindow(int[] nums, int k) {        if(nums == null || nums.length == 0) {            return new int[0];        }                LinkedList<Integer> list = new LinkedList<>();//list里面存index        int[] result = new int[nums.length - k + 1];                for(int i = 0; i < nums.length; i ++){            while(!list.isEmpty() && list.peek() < i - k + 1){//把window外面的挪出去                list.poll();            }                        while(!list.isEmpty() && nums[list.peekLast()] < nums[i]){//把比当前要加的新元素小的挪出去 也就是window里面只留下最大值                list.removeLast();            }            list.offerLast(i);            if((i + 1) >= k) {//c从i = k-1的地方开始,也就是第一次填满window的地方                result[i + 1 - k] = nums[list.peek()];            }        }        return result;    }}




原创粉丝点击