Leetcode Java学习记录——栈和队列 IDEA

文章目录

  • 栈和队列
    • stack Class
    • queue Interface
    • Deque Interface
      • add 和 push
    • Priority Queue -- Class
    • 题目
  • codestyle
  • IDEA 操作
    • 快捷键
      • 选择
      • 代码生成类

栈和队列

stack Class

google stack java 8/12

empty()
peek()
pop()
push(E item)
search(Object o)

最近相关性会用到栈

queue Interface

  • Throws exception:
    add(e)
    remove()
    element()
  • Returns special value:
    offer()
    peek()
    poll()

大多滑动窗口的题目,用队列解决即可。

Deque Interface

ArrayDeque,LinkedList…

API与queue类似,乘二。
分为First和Last。

add 和 push

当我们使用Deque实现栈的功能时,注意要用push(==addFirst)。不要写成add(==addLast)

LinkedList实现的Deque,peek,pop,push都是在列表头进行操作。

Priority Queue – Class

  1. 插入O(1)
  2. 取出O(lonN)- 按照元素的优先性
  3. 底层具体实现多样,可以用heap堆、bst、treap

题目

  1. 有效的括号
class Solution {
    public boolean isValid(String s) {
        Deque < Character > deque = new LinkedList<>();//注意实例化的写法
        //用了char,后续都要用单引号,不能用双引号String
        char ch ;
        for ( int i = 0 ; i < s.length() ; i++ ){
            ch = s.charAt(i);//charAt的写法
            if( ch == '('){
                deque.push(')');//这里deque是push,不是append。更不是add。
            }else if(ch == '['){
                deque.push(']');
            }else if(ch =='{' ){
                deque.push('}');
            }//下面一行搞错了,如果过程中deque就空了,也要返回false。所以不能是且,是或
            //else if(deque.isEmpty()!=false && ch != deque.peek()){
            else if(deque.isEmpty() || ch != deque.peek()){
                return false;
            }else{
                deque.pop();
            }
        }
        return deque.isEmpty();
    }
}
  1. 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。

class MinStack {
    // 两个栈即可实现
    private Stack<Integer> stack;
    private Stack<Integer> min_stack;
    public MinStack() {
        stack = new Stack<>();
        min_stack = new Stack<>();
    }
    
    public void push(int val) {
        stack.push(val);
        if(min_stack.isEmpty() || val<=min_stack.peek() )
            min_stack.push(val);
    }
    
    public void pop() {
        if(stack.pop().equals(min_stack.peek()))
            min_stack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return min_stack.peek();
    }
}
  1. 柱状图中的最大矩形面积

给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

class Solution {
    public int largestRectangleArea(int[] heights) {
        //暴力:遍历每一个,左右到比他更小就停,总结矩形面积。On方
        //单调栈
        Stack<Integer> stack = new Stack<>();
        stack.push(-1);
        int maxArea = 0;
        for(int i = 0 ; i <heights.length ; i ++){
            //每次有新元素就和栈顶比较大小,直到入栈。
            //栈顶大则pop,且计算pop的index对应的area
            //栈顶小则入栈,不用计算area
            while(stack.peek() != -1 && heights[stack.peek()] > heights[i]){
                 int index = stack.pop() ;
                 maxArea = Math.max( maxArea , heights[index] * (i-stack.peek()-1));
            }
            //千万别忘了入栈
            stack.push(i);
        }
        while(stack.peek() != -1){
            int index = stack.pop() ;
            //错误写法,计算错误
            //maxArea = Math.max( maxArea , heights[index] * (index-stack.peek()-1));
            maxArea = Math.max( maxArea , heights[index] * (heights.length-stack.peek()-1));
        }
        return maxArea;
    }
}

优化方法: 单调栈
每一个点要有左右边界。
为了找边界,可以用栈。

维护一个栈,栈里元素从小到大排列。
(实际上可以是栈里放index,随时可以查到对应的height,height才是从小到大排列)

向右走一位,进行至少一次判断。

发现新高度小于栈顶,则说明有一个右边界可以确定。

而左边界一直是栈里该元素的下面一位(下一位是他左边刚好比他小的那一个)的下标。

Area=(right- left -1)*index;

pop之后继续判断,若新高度小于栈顶,重复上述过程。直到新高度大于栈顶高度,新高度入栈。

栈底用 -1
则left = (-1)时公式不变,边界处理一致。

class Solution {
    public int largestRectangleArea(int[] heights) {
        //暴力:遍历每一个,左右到比他更小就停,总结矩形面积。On方
        //单调栈
        Stack<Integer> stack = new Stack<>();
        stack.push(-1);
        int maxArea = 0;
        for(int i = 0 ; i <heights.length ; i ++){
            //每次有新元素就和栈顶比较大小,直到入栈。
            //栈顶大则pop,且计算pop的index对应的area
            //栈顶小则入栈,不用计算area
            while(stack.peek() != -1 && heights[stack.peek()] > heights[i]){
                 maxArea = Math.max( maxArea , heights[stack.pop()] * (i-stack.peek()-1));
            }
            //千万别忘了入栈
            stack.push(i);
        }
        while(stack.peek() != -1){
            //错误写法,计算错误
            //maxArea = Math.max( maxArea , heights[index] * (index-stack.peek()-1));
            maxArea = Math.max( maxArea , heights[stack.pop()] * (heights.length-stack.peek()-1));
        }
        return maxArea;

    }
}

codestyle

每一个括号和运算符前后都应该加空格。

IDEA 操作

快捷键

Home End键——行头行尾
删除行 ctrl + Y

选择

扩选 ctrl + W
缩选 ctrl + Shift + W

代码生成类

Alt+Insert:在目录中使用该快捷键可以新建包,文件,类。在 java 文件中可以进行 setter,getter,构造方法,toString等方法生成,生成方法覆盖(重写)。
Ctrl+Shift+空格:智能代码提示,代码自动补全。可用于强制类型转换补全,new 对象补全,return 补全等。
Ctrl+Shift+Enter:自动补全代码结构。自动生成 if, do-while, try-catch, return(或方法调用) 语法正确的代码结构,比如添加括号和大括号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/762877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3

前言 llama 3出来后&#xff0c;为了通过paper-review的数据集微调3&#xff0c;有以下各种方式 不用任何框架 工具 技术&#xff0c;直接微调原生的llama 3&#xff0c;毕竟也有8k长度了 效果不期望有多高&#xff0c;纯作为baseline通过PI&#xff0c;把llama 3的8K长度扩展…

生产环境部署与协同开发-Docker(原创超全)

关闭防火墙 systemctl stop firewalld.service 关闭SELinux vim /etc/selinux/config 查看yum支持的包并安装docker引擎 yum listyum install -y docker 启动docker设置docker自启动测试docker是否安装成功&#xff1f; systemctl start dockersystemctl enable dockerdoc…

把图片的透明部分去掉

问题&#xff1a; canvas裁剪的图把整个画布都剪下来了&#xff0c;但只要有元素的部分 // 图像处理// 把图片的透明部分去掉 export function getImagesRealSize(dataUrl) {return new Promise((resolve, reject) > {// 将Base64解码为二进制数据let binaryString atob(…

【启明智显活动分享】 启明与你,上海慕尼黑电子展不见不散!

启明与你&#xff0c;上海慕尼黑电子展不见不散&#xff01;&#x1f389; &#x1f50d; 展会现场&#xff0c;你将亲眼目睹RTOS、LINUX、Android全系列方案及产品的精彩展示。从经典到前沿&#xff0c;一站式满足你的技术探索需求。 &#x1f4a1; 更值得期待的是&#xff0…

微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

硬件实用技巧:cadence Aleego创建焊盘过程

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140110911 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

windows USB 设备驱动开发-Host端和Device端

Windows 中的 USB 宿主端驱动程序 下图显示了适用于 Windows 的 USB 驱动程序堆栈的体系结构框图。 此图显示了适用于 USB 2.0 和 USB 3.0 的单独 USB 驱动程序堆栈。 当设备连接到 xHCI 控制器时&#xff0c;Windows 加载 USB 3.0 驱动程序堆栈。 Windows 为连接到 EHCI、OHC…

Windows/Linux/Mac 系统局域网服务发现协议及传输速度比较

简介 分析 / 验证对比常见局域网服务发现协议在 Windows/Linux/Mac 等不同系统下的支持和表现 在使用不同系统的智能硬件时&#xff0c;如常见的树莓派 / Openwrt 路由器 / Debian/Fedora/Windows/Mac 等系统是&#xff0c;系统间相互发现以及网络共享本应是系统的基础服务&a…

【RT摩拳擦掌】基于RT106L/S语音识别的百度云控制系统

【RT摩拳擦掌】基于RT106L/S语音识别的百度云控制系统 一 文档简介二 平台构建2.1 使用平台2.2 百度智能云2.2.1 物联网核心套件2.2.2 在线语音合成 2.3 playback语音数据准备与烧录2.4 开机语音准备与添加2.5 唤醒词识别词命令准备与添加 三 代码准备3.1 sln-local/2-iot 代码…

黑马点评下订单-小程序下单没问题但是Postman发送请求失败了,返回401

经过多方探索&#xff0c;这个✓8错误就是由于黑马点评使用了拦截器&#xff0c;我们直接发送请求是会被拦截器拦截下来的&#xff0c;我给出的解决方案是通过配置Postman解决&#xff0c;方法很简单&#xff01; 解决方案 右边的value写上Redis里面登录所用token值就可以了…

【TB作品】打地鼠游戏,ATMEGA16单片机,Proteus仿真 打地鼠游戏

11个按键LCD1602显示器9个灯蜂鸣器打地鼠小游戏就是九个灯泡&#xff0c;对应九个按键&#xff0c;灯泡有红黄蓝&#xff0c;每间隔一会儿就会亮一个灯&#xff0c;代表地鼠冒出来&#xff0c;按一下按键让灯泡灭掉代表打地鼠&#xff0c;红的三分&#xff0c;黄的两分&#xf…

开发自动发送国际短信的工具需要用到哪些源代码?

在当今数字化、全球化的时代&#xff0c;国际短信作为一种高效、便捷的沟通方式&#xff0c;在各个领域发挥着越来越重要的作用。 开发一款能够自动发送国际短信的工具&#xff0c;不仅能够帮助企业实现精准营销、客户服务&#xff0c;还能为个人提供便捷的跨国交流方式。 本…

手把手教你搭建PyTorch环境:MindStudio中PyTorch模型开发实战

本次实验的视频链接如下&#xff1a;​https://www.bilibili.com/video/BV1iA4y1f7o1/ 本次实验在MindStudio上进行&#xff0c;请先按照 教程 配置环境,安装MindStudio。 ​ MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台&#xff0c;该IDE上功能很多…

Leetcode.1735 生成乘积数组的方案数

题目链接 Leetcode.1735 生成乘积数组的方案数 rating : 2500 题目描述 给你一个二维整数数组 q u e r i e s queries queries &#xff0c;其中 q u e r i e s [ i ] [ n i , k i ] queries[i] [n_i, k_i] queries[i][ni​,ki​] 。第 i i i 个查询 q u e r i e s [ i …

AI绘画工具Midjourney:和Discord互相成就

前言 提到文生图&#xff0c;很多人都会想到植根于根植于Discord社区的Midjourney&#xff0c;本篇文章就基于作者的使用体验思考&#xff0c;并结合了Discord来对Midjourney进行探讨&#xff0c;感兴趣的朋友一起来看看吧。 如果要说现在最火的文生图&#xff0c;不得不说到Mi…

深入理解 “androidx.databinding.DataBindingUtil“ 细节和使用

介绍 数据绑定&#xff08;Data Binding&#xff09;是 Android 中的一个强大功能&#xff0c;它允许你使用声明性格式而不是编程方式将布局中的 UI 组件绑定到应用中的数据源。androidx.databinding.DataBindingUtil 类是一个工具类&#xff0c;它提供了用于处理数据绑定的方…

单片机语音识别控制蓝牙通信

基于单片机语音识别控制&蓝牙控制 1、Arduino单片机语音控制1.1 直连1.2 蓝牙无线连接1.3 部分核心程序1.4 实物演示 2、51单片机语音控制2.1 直连2.2 蓝牙无线连接2.3 部分核心程序2.4 实物演示 3、STM32单片机语音控制3.1 直连3.2 蓝牙无线连接3.3 部分核心程序3.4 实物演…

数据结构之“刷链表题”

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;数据结构 目录 前言 一、相交链表 题目链接 大致思路 代码实现 二、环形链表1 题目链接 大致思路 代码实现 三、环形链表2 题目链接 大致思路 代码实…

RANSAC空间圆拟合实现

由初中的几何知识我们可以知道&#xff0c;确定一个三角形至少需要三个不共线的点&#xff0c;因此确定一个三角形的外接圆至少可用三个点。我们不妨假设三个点坐标为P1(x1,y1,z1),P2(x2,y2,z2),P3(x3,y3,z3)。 圆方程的标准形式为&#xff1a; (xi-x)2(yi-y)2R2 &#xff08;1…

8605 删数问题

这是一个典型的贪心算法问题。我们可以从高位开始&#xff0c;找到第一个比后面数字大的数字&#xff0c;删除它&#xff0c;然后继续这个过程&#xff0c;直到删除k个数字。如果我们已经删除了k个数字&#xff0c;但是还没有找到一个比后面数字大的数字&#xff0c;那么我们就…