首页 > 其他分享 >239. 滑动窗口最大值(leetcode)

239. 滑动窗口最大值(leetcode)

时间:2024-04-30 22:33:06浏览次数:30  
标签:deque val peek int 最大值 239 MyQueue leetcode

https://leetcode.cn/problems/sliding-window-maximum/

简单的滑动窗口,但是与ACM模式的维护数组不同,在leetcode定义单调队列类更加方便

class MyQueue{
    // 单调队列实现,递减
    Deque<Integer> deque = new LinkedList<>();
    void poll(int val) {
        if (!deque.isEmpty() && val == deque.peek()) {
            deque.poll();
        }
    }

    void add(int val){
        while(!deque.isEmpty() && deque.getLast() < val){
            deque.removeLast();
        }
        deque.add(val);
    }

    int peek(){
        return deque.peek();
    }
}



class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int n = nums.length;
        int[] res = new int[n-k+1];
        int len=0;
        MyQueue q = new MyQueue();
        for(int i=0;i<k;i++)q.add(nums[i]);
        res[len++]=q.peek();
        for (int i = k; i < nums.length; i++) {
            // 移除队尾,若该元素仍在队列中则移除
            q.poll(nums[i - k]);
            // 加入队列,移除队列中比该元素小的,保持单调
            q.add(nums[i]);
            res[len++] = q.peek();
        }
        return res;
    }
}

 

标签:deque,val,peek,int,最大值,239,MyQueue,leetcode
From: https://www.cnblogs.com/lxl-233/p/18168812

相关文章

  • leetcode算法热题--字母异位词组合
    题目给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。示例1:输入:strs=["eat","tea","tan","ate","nat","bat"]输出:[["bat"],["nat","tan"],[&q......
  • leetcode算法热题--两树之和
    题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值`target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,11,15......
  • 【LeetCode 1648】销售价值减少的颜色球
    题目描述原题链接:LeetCode.1648销售价值减少的颜色球解题思路题意很容易理解,就是每次挑剩余同色球数量最大的颜色卖得到最大价值,总共卖orders个球的最大总价值;最快速直观暴力的解法是按照同色球数量排序,每次取数量最大值累加到总价值中并且将数量减一后重新排序,重复or......
  • leetcode(力扣) 2866. 美丽塔 II
    原题链接暴力做法(时间复杂度O(n^2))每次选取下标i为峰值,进行n次,对每次取max就可以找打答案对于i左边的序列:需要满足序列是非递减的,同时每个值尽可能大所以满足:下标为j的位置上的数<=下标是(j,i]的最小的值(等于时取得最大值),同时需要保证j位......
  • LeetCode三则
    72.编辑距离给你两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入:word1="horse",word2="ros"输出:3解释:horse->rorse(将'h'替换为'r')rorse->rose(删......
  • 56. 合并区间(leetcode)
    https://leetcode.cn/problems/merge-intervals/?envType=study-plan-v2&envId=top-100-liked合并区间练习题typedefpair<int,int>PII;vector<PII>segs;classSolution{public:vector<vector<int>>merge(vector<vector<int>>......
  • LeetCode三则
    5.最长回文子串给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1<=s.length<=1000s仅由数字和英文字母组成cl......
  • 72. 编辑距离(leetcode)
    https://leetcode.cn/problems/edit-distance/description/?envType=study-plan-v2&envId=top-100-liked这是一个难题,关于序列DP的,官方的题解较为难懂,这里有一位前辈解释的很好这里的状态定义是:dp[i][j]表示word1的前i个字母,转换成word2的前j个字母的最小步数classS......
  • LeetCode 1331. Rank Transform of an Array
    原题链接在这里:https://leetcode.com/problems/rank-transform-of-an-array/description/题目:Givenanarrayofintegers arr,replaceeachelementwithitsrank.Therankrepresentshowlargetheelementis.Therankhasthefollowingrules:Rankisanintegers......
  • [leetcode 周赛] 100276. 最短路径中的边
    solution使用dijkstra算法求出顶点0到每个顶点的最小距离dp[i]然后再从n-1开始遍历,如果dp[to]+w==dp[from],这条边符合条件importjava.util.*;classSolution{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();......