首页 > 编程语言 >算法笔记|Day10栈与队列II

算法笔记|Day10栈与队列II

时间:2024-07-28 17:00:43浏览次数:23  
标签:deque 题目 num1 队列 equals II int Day10 leetcode

算法笔记|Day10栈与队列II

☆☆☆☆☆leetcode 150. 逆波兰表达式求值

题目链接:leetcode 150. 逆波兰表达式求值

题目分析

1.依次遍历各个元素,若不为运算符则入栈,若为运算符则取前两个元素作相应运算,直至结束;
2.时间复杂度为O(n),空间复杂度为O(n)。

代码

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> deque=new LinkedList();
        for(String s:tokens){
            if(!("+".equals(s)||"-".equals(s)||"*".equals(s)||"/".equals(s))){
                deque.push(Integer.valueOf(s));
            }else{
                int num1=deque.pop(),num2=deque.pop();
                if("+".equals(s)){
                    deque.push(num2+num1);
                }else if("-".equals(s)){
                    deque.push(num2-num1);
                }else if("*".equals(s)){
                    deque.push(num2*num1);
                }else if("/".equals(s)){
                    deque.push(num2/num1);
                }
            }
        }
        return deque.pop();
    }
}

☆☆☆☆☆leetcode 239. 滑动窗口最大值

题目链接:leetcode 239. 滑动窗口最大值

题目分析

1.考虑单调队列,i为nums下标,是要在[i-k+1, i]中选到最大值,只需要保证:① 队列头结点需要在[i -k+1, i]范围内,不符合则要弹出,②每次放进去的数字要比末尾的都大,否则也弹出,③当i增长到符合第一个k范围的时候,每滑动一步将队列头节点放入结果;
2.时间复杂度为O(n),空间复杂度为O(k)。

代码

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

☆☆☆☆☆leetcode 347.前 K个高频元素(待补充)

题目链接:leetcode 347.前 K个高频元素

题目分析

代码


标签:deque,题目,num1,队列,equals,II,int,Day10,leetcode
From: https://blog.csdn.net/m0_57632621/article/details/140737968

相关文章

  • 算法笔记|Day9栈与队列
    算法笔记|Day9栈与队列☆☆☆☆☆leetcode232.用栈实现队列题目分析代码☆☆☆☆☆leetcode225.用队列实现栈题目分析代码☆☆☆☆☆leetcode20.有效的括号题目分析代码☆☆☆☆☆leetcode1047.删除字符串中的所有相邻重复项题目分析代码☆☆☆☆☆leetcod......
  • 【Linux应用编程】Day10_进程 一文详细剖析进程,从基本概念到创建再到进程操作直至消亡
    进程详细剖析进程,包括以下内容:⚫程序与进程基本概念;⚫程序的开始与结束;⚫进程的环境变量与虚拟地址空间;⚫进程ID;⚫fork()创建子进程;⚫进程的消亡与诞生;⚫僵尸进程与孤儿进程;⚫父进程监视子进程;⚫进程关系与进程的六种状态;⚫守护进程;⚫进程间通信概......
  • yii2代码封装
    1、批量更新某个字段/***@throwsCDbException*@throwsCException*updatexxxTablesetcolumn1=casepk*whenwhenData1thencaseData1*...*END*whereidin(1,2,3...)*/publicfunctionbatc......
  • JUC并发编程:基于Condition实现一个阻塞队列
    Condition方法概述await():当前线程进入等待状态,直到被通知(siginal)或中断【和wait方法语义相同】。awaitUninterruptibly():当前线程进入等待状态,直到被通知,对中断不敏感。awaitNanos(longtimeout):当前线程进入等待状态直到被通知(siginal),中断或超时。awaitUnit......
  • Allegro17.4 “.brd“ 转 ASCII
    1.找到`Cadence\SPB_Data`文件夹(一般在Allegro的安装目录下可以找到),添加到系统变量`HOME=xxx\Cadence\SPB_Data`。2.文件夹里面的文件全部拷入到`X:\xxx\Cadence\SPB_Data\pcbenv`目录下面。3.重启Allegro后,即可看到菜单栏新增了`BatchConversion`。4.点击Batc......
  • 力扣90题:子集II的 Java 实现
    引言LeetCode是一个流行的在线编程平台,提供了大量的算法题目供开发者练习。第90题“子集II”是一个中等难度的题目,要求找出数组的所有子集,但是含重复数字的子集只计算一次。本文将介绍如何使用Java解决这个问题。题目描述给定一个可能包含重复数字的整数数组nums,返回......
  • 代码随想录算法训练营第24天:回溯03:93.复原IP地址;78.子集;90.子集II
    93.复原IP地址力扣题目链接(opensnewwindow)给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式。有效的IP地址正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。例如:"0.1.2.201"和"192.168.1.1"是有效的IP地址,......
  • IIS Express介绍与使用
    IISExpress是什么?如何安装IISExpress如何启动IISExpress配置文件 IISExpress是什么?IISExpress是为开发人员优化的轻量级、自包含版本的IIS。IISExpress使使用当前最新版本的IIS来开发和测试网站变得容易。它具有IIS7及以上的所有核心功能,以及为简化网站开发而......
  • 代码随想录算法训练营第十天 | 232.用栈实现队列 , 225. 用队列实现栈 , 20. 有效的括号
    前两道题目之前单独写了文章,此处就不再重复。232.用栈实现队列-CSDN博客225.用队列实现栈-CSDN博客20.有效的括号题目链接:力扣题目链接文章讲解:代码随想录 视频讲解:栈的拿手好戏!|LeetCode:20.有效的括号思路括号匹配是使用栈解决的经典问题。由于栈结构的......
  • AT24C02(IIC)
    AT24C02概述:AT24C02是一个2K位串行CMOSE2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能主要特点:存储容量:2Kbit(256字节),可用作保存小块配置数据......