LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值

LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值,第1张

LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值

文章目录
  • LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值
  • 题目描述

  • 一、解题关键词


  • 二、解题报告

    • 1.思路分析
    • 2.时间复杂度
    • 3.代码示例
    • 2.知识点
  • 总结

题目描述
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。


示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [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

剑指 Offer 59 - I. 滑动窗口的最大值
提示:

你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。



一、解题关键词



二、解题报告 1.思路分析 2.时间复杂度 3.代码示例

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int len = nums.length;
        if(len == 0 || k == 0){
            return new int[0];
        }
        Deque<Integer> deque = new LinkedList<Integer>();
        int[] res = new int[len - k + 1];

        for(int j = 0,i = 1 - k;j < len;i++,j++){
            //删除deque对应的nums[ i - 1];
            if(i > 0 && deque.peekFirst() == nums[i - 1]){
                deque.removeFirst();
            }
            //保持deque 递减
            while(!deque.isEmpty() && deque.peekLast() < nums[j]){
                deque.removeLast();
            }
            deque.addLast(nums[j]);
            //记录窗口最大值
            if(i >= 0){
                res[i] = deque.peekFirst();
            }
            
        }
        return res;

    }
}
2.知识点
可以使用队列代替双指针,只要保持滑动状态就可以

总结

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/607874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-14
下一篇 2022-04-14

发表评论

登录后才能评论

评论列表(0条)

保存