LeetCode239——滑动窗口最大值

版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/87814755

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/sliding-window-maximum/description/

题目描述:

知识点:双端队列

思路一:暴力破解法

时间复杂度是O((n - k) * k),其中n为nums数组的长度。

JAVA代码:

public class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if (0 == nums.length){
            return nums;
        }
        int[] result = new int[nums.length - k + 1];
        for (int i = 0; i < result.length; i++) {
            int left = i, right = i + k - 1;
            int max = Integer.MIN_VALUE;
            for (int j = left; j <= right; j++) {
                if (nums[j] > max){
                    max = nums[j];
                }
            }
            result[i] = max;
        }
        return result;
    }
}

LeetCode解题报告:

思路二:双端队列在线处理

用一个双端队列保存nums数组的索引。遍历nums数组的每一个元素,对其索引值进行入队出队操作。

假设滑动窗口范围是[i - k + 1, i],其中i为nums数组的索引。

(1)如果双端队列不为空,且队首元素的值小于i - k + 1,那么显然该队首元素不在我们的滑动窗口范围内,我们需要令该队首元素出队。

(2)如果双端队列不为空,且nums数组中索引为队尾元素的值小于索引为i的值,那么显然,对后续的最大值求解,nums数组中索引为i位置的值更有可能是[i - k + 1, i]中的最大值,我们可以忽略该队尾元素,于是令该队尾元素出队。

(3)将索引i入队并用nums数组中队首元素的索引位置的值更新result数组的值。

时间复杂度是O(n),其中n为nums数组的长度。空间复杂度是O(k)。

JAVA代码:

public class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if (0 == nums.length){
            return nums;
        }
        int[] result = new int[nums.length - k + 1];
        int index = 0;
        Deque<Integer> deque = new ArrayDeque<>();
        for (int i = 0; i < nums.length; i++) {
            while (!deque.isEmpty() && deque.peekFirst() < i - k + 1) {
                deque.pollFirst();
            }
            while (!deque.isEmpty() && nums[deque.peekLast()] < nums[i]) {
                deque.pollLast();
            }
            deque.add(i);
            if (i >= k - 1) {
                result[index++] = nums[deque.peekFirst()];
            }
        }
        return result;
    }
}

LeetCode解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/87814755