首页 > 其他分享 >【剑指 Offer】 59 - II. 队列的最大值

【剑指 Offer】 59 - II. 队列的最大值

时间:2023-04-26 10:23:24浏览次数:36  
标签:59 Offer 队列 max 最大值 back value II deq

【题目】

请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。

若队列为空,pop_front 和 max_value 需要返回 -1

示例 1:

输入:
["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
[[],[1],[2],[],[],[]]
输出: [null,null,null,2,1,2]

示例 2:

输入:
["MaxQueue","pop_front","max_value"]
[[],[],[]]
输出: [null,-1,-1]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/dui-lie-de-zui-da-zhi-lcof

【思路】

维护一个递减队列,显示最大值直接返回队列头,出队时如果出的是最大值同步更新。

【代码】

class MaxQueue {
    Queue<Integer> que;
    Deque<Integer> deq;
    public MaxQueue() {
        que = new LinkedList<>();
        deq = new LinkedList<>();

    }
    

    public int max_value() {
        return deq.isEmpty()?-1:deq.peekFirst();

    }
    

    public void push_back(int value) {
        que.offer(value);
        while(!deq.isEmpty()&&deq.peekLast()<value){
            deq.removeLast();
        }
        deq.addLast(value);

    }
    

    public int pop_front() {
        if(que.isEmpty()) return -1;
        // 如果出去的就是最大值,更新一下递减队列的情况
        if(que.peek().equals(deq.peekFirst())){
            deq.pollFirst();
        }
        // 否则不用更新,因为中间值会在次大值出去之前就出去了,比如3 -1 -3 5 3 ,当出去5的时候,-1 和-3 早就出去了,只有后面的值会有影响。
        return que.poll();

    }
}

 

标签:59,Offer,队列,max,最大值,back,value,II,deq
From: https://www.cnblogs.com/End1ess/p/17354839.html

相关文章

  • 【剑指 Offer】 59 - I. 滑动窗口的最大值
    【题目】给定一个数组nums和滑动窗口的大小k,请找出所有滑动窗口里的最大值。示例:输入:nums=[1,3,-1,-3,5,3,6,7],和k=3输出:[3,3,5,5,6,7]解释: 滑动窗口的位置               最大值---------------              -----[1 3 ......
  • NC20259 [SCOI2007]降雨量
    题目链接题目题目描述我们常常会说这样的话:“X年是自Y年以来降雨量最多的”。它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年。例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005年是自2003年以来最多的”,但不能说“2005年是自......
  • 剑指 Offer II 017. 含有所有字符的最短字符串
    题目链接:剑指OfferII017.含有所有字符的最短字符串方法:同向双指针解题思路基本思路:统计\(t\)字符串中每个字符的个数,然后使用双指针遍历字符串\(s\),当窗口覆盖\(t\)中所有字符时,开始缩短左指针到可以到达的最右侧,取窗口最小的字符串为答案;需要考虑的问题:什么情况......
  • 分治算法:剑指 Offer 25. 合并两个排序的链表
    题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 限制:0<=链表长度<=1000 解题思路:    classSolution{publicListNodemergeTwoLists(ListNodel1,ListNodel2){ListNodedum=newListNode......
  • 【DP】LeetCode 213. 打家劫舍 II
    题目链接213.打家劫舍II思路分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数组的动态规划问题中,一般dp[i]都是表示以nums以前i个元素组成(即nums[i-1])的状态;dp[i][j]分别表示以nums1前i个元素(即n......
  • Java代码虾皮item_search-根据关键词获取商品列表 API 接口(title商品标题、pic_url宝
     Shopee是东南亚最大的电商平台之一。Shopee拥有商品种类,包括电子消费品、家居、美容保健、母婴、服饰及健身器材等。做好shopee店铺需要注意以下几点:1.选择优质的产品2.每日上新产品3.营销策略4.引流策略5.发货的地点Java代码操作示例importjava.io.BufferedReader;impo......
  • 剑指 Offer 55 - II. 平衡二叉树
    剑指Offer55-II.平衡二叉树输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例1:给定二叉树[3,9,20,null,null,15,7]3/\920/\157返回true。示例2:......
  • 剑指 Offer 10- II. 青蛙跳台阶问题
    分析:因为好久没有练习思维还没有转变,所以这道题思考有点慢首先还是建立状态,到达第i级台阶时,有f[i]种跳法最后答案f[n-1]再状态转移,f[i]=f[i-1]+f[i-2] 赋初值,因为可以选择跳一阶或者两阶,所以初始赋值f[0]和f[1],f[0]=1,f[1]=2然后编写代码,但是最后有个问题,不知道1e9+7不是......
  • 剑指 Offer II 088. 爬楼梯的最少成本
    剑指OfferII088.爬楼梯的最少成本-力扣(LeetCode)分析:先思考建立状态。到达第i阶台阶时,花费最少体力为f[i]。再状态转移,到达i时有两种选择,从i-1或者i-2到i,两者取最小的再加上i需要花费的体力cost[i]。结果f[-1]最后得出状态转移:f[i]=min(f[i-1],f[i-1])+cost[i]......
  • Codeforces Round #459 (Div. 2) D. MADMAX DAG&&博弈
    Asweallknow,Maxisthebestvideogameplayeramongherfriends.Herfriendsweresojealousofhers,thattheycreatedanactualgamejusttoprovethatshe’snotthebestatgames.Thegameisplayedonadirectedacyclicgraph(aDAG)withnvertic......