秋招力扣Hot100刷题总结——栈和队列

news2024/10/1 9:41:45

1. 有效的括号 题目链接

  • 题目要求:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
    有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    每个右括号都有一个对应的相同类型的左括号。
    在这里插入图片描述
  • 代码及思路
    • 经典的使用栈来解决的问题
    • 遇到左括号将对应的右括号入栈,遇到右括号则与栈顶元素进行比较,若不同则直接返回false,相同则弹出栈顶元素
    • 最后栈为空,表明完全匹配,返回true
    • 代码
class Solution {
    public boolean isValid(String s) {
        if(s.length()%2!=0)return false;
        Deque<Character> cache=new LinkedList<>();
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            if(c=='('){
                cache.push(')');
            }else if(c=='['){
                cache.push(']');
            }else if (c=='{'){
                cache.push('}');
            }else if(c==')'){
                if(cache.isEmpty()||c!=cache.pop())return false;
            }else if(c==']'){
                if(cache.isEmpty()||c!=cache.pop())return false;
            }else if(c=='}'){
                if(cache.isEmpty()||c!=cache.pop())return false;
            }
        }
        return cache.isEmpty();
    }
}

2. 滑动窗口最大值 题目链接

  • 题目要求:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
    返回 滑动窗口中的最大值 。
    在这里插入图片描述
  • 使用一个单调递增的双向队列解决问题
  • 遍历数组元素,在每一次遍历中当窗口大小大于k时,将队列最初元素出栈
  • 循环将小于当前元素的队尾元素出栈
  • 当达到窗口大小后开始记录窗口最大值,即为队列队首元素
  • 注意队列中存储的是元素的下标值
  • 代码
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        Deque<Integer> cache=new LinkedList<>();
        int[] res=new int[nums.length-k+1];
        int j=0;
        for(int i=0;i<nums.length;i++){
            while(!cache.isEmpty()&&i-k+1>cache.getFirst()){
                cache.pollFirst();
            }
            while(!cache.isEmpty()&&nums[i]>nums[cache.getLast()]){
                cache.pollLast();
            }
            cache.offer(i);
            if(i-k+1>=0)res[j++]=nums[cache.getFirst()];
        }
        return res;
    }
}

3. 字符串解码 题目链接

  • 题目要求:给定一个经过编码的字符串,返回它解码后的字符串。
    编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
    你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
    此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
    在这里插入图片描述
  • 代码及思路
    • 使用栈解决问题,分别使用一个栈存储数字和之前的字符串
    • 遇到‘[’将数字和当前字符串入栈,遇到’]'则将之前的数字和字符串取出和当前的字符串做拼接
    • 代码
class Solution {
    public String decodeString(String s) {
        Stack<Integer> numbers=new Stack<>();
        Stack<String> strs=new Stack<>();
        int num=0;
        String cur="";
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            if(c>='0'&&c<='9'){
                num=num*10+c-'0';
            }else if(c=='['){
                numbers.push(num);
                num=0;
                strs.push(cur);
                cur="";
            }else if(c==']'){
                StringBuilder temp=new StringBuilder(strs.pop());
                int len=numbers.pop();
                for(int j=0;j<len;j++){
                    temp.append(cur);
                }
                cur=temp.toString();
            }else{
                cur=cur+c;
            }
        } 
        return cur;
    }
}

4. 回文链表 题目链接

  • 题目要求:给你一个单链表的头节点 head ,请你判断该链表是否为
    回文链表。如果是,返回 true ;否则,返回 false 。
    在这里插入图片描述
  • 代码及思路
    • 使用栈解决,先遍历链表将所有节点的值压入栈中
    • 再次从头遍历链表,每次将节点值与栈顶元素相比较
    • 代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        if(head==null)return true;
        if(head.next==null)return true;
        ListNode cur=head;
        Stack<Integer> cache=new Stack<>();
        while(cur!=null){
            cache.push(cur.val);
            cur=cur.next;
        }
        cur=head;
        while(cur!=null){
            int num=cache.pop();
            if(cur.val!=num)return false;
            cur=cur.next;
        }
        return true;
    }
}

5. 每日温度 题目链接

  • 题目要求:给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
    在这里插入图片描述
  • 代码及思路
    • 使用一个单调递减栈来存储温度的下标值
    • 遍历温度数组,然后循环找出栈中小于当前温度的温度下标值,更新answer数组
    • 将当前温度的下标入栈
    • 代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] answers=new int[temperatures.length];
        Stack<Integer> cache=new Stack<>();
        for(int i=0;i<temperatures.length;i++){
            while(!cache.isEmpty()&&temperatures[i]>temperatures[cache.peek()]){
                int j=cache.pop();
                answers[j]=i-j;
            }
            cache.push(i);
        }
        return answers;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux安装并配置Hadoop

目录 一、安装并配置JDK二、安装并配置Hadoop三、安装过程中遇到的问题总结 一、安装并配置JDK Linux上一般会安装Open JDK,关于OpenJDK和JDK的区别&#xff1a;http://www.cnblogs.com/sxdcgaq8080/p/7487369.html 准备Open JDK 1.8 查询可安装的java版本 yum -y list jav…

Swin-Transformer论文阅读

在此前&#xff0c;transformer已经通过ViT等作品展现出了它在cv领域的无限可能性&#xff0c;但是&#xff0c;vit主要针对的是图像分类问题的讨论&#xff0c;而分类只是cv众多问题中最基础的问题之一。那么&#xff0c;怎么用transformer进行物体检测&#xff0c;语义分割这…

vscode中使用官方推荐的编程字体Cascadia Code字体

字体样式 > 和 有特殊效果 很多字体都支持使用连字&#xff0c;Cascadia Code 、Jetbrains Mono 、Fira Code 等 安装Cascadia Code 下载完成后解压安装 选中右键安装&#xff0c;static文件里也一样安装 VS Code 中配置设置字体和连字设置 Cascadia Code, Consolas, Couri…

基于协同过滤算法的私人诊所管理系统_6t4o8

TOC springboot571基于协同过滤算法的私人诊所管理系统_6t4o8--论文 绪 论 1.1研究背景 自改革开放以来&#xff0c;国内的基础网络设施的不断进步和终端电子设备的高度普及&#xff0c;互联网用户规模越来越大[1]。现在人们越来越离不开计算机网络、互联网所带来的好处了&…

Windows—TCP编程

服务端骨架&#xff1a; #include <iostream> #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #include <windows.h>int main() {WORD wVersionRequested MAKEWORD(2, 2);WSADATA WSAData;WSAStartup(wVersionRequested, &WSADat…

调用第三方API,可能会遇到的问题?

在实际工作中&#xff0c;我们经常需要在项目中调用第三方API接口&#xff0c;获取数据&#xff0c;或者上报数据&#xff0c;进行数据交换和通信。 那么&#xff0c;调用第三方API接口会遇到哪些问题&#xff1f;如何解决这些问题呢&#xff1f; 这篇文章就跟大家一起聊聊第…

浅谈国产大模型的过去、现在以及未来

随着时间推移&#xff0c;AI与大模型正在肉眼可见的降温。 怎样去衡量一款AI产品是否成功&#xff1f; 这个问题如果放在两年前&#xff0c;很多人给出的答案会集中在AI的狭义领域&#xff0c;AlphaGo、Siri、Google Assistant&#xff0c;或是用于解锁手机的图像识别技术&am…

根据json字符串 自动生成 实体类 Model Entity .NET

①访问json2csharp的在线工具&#xff1a;http://json2csharp.com/ ②复制json字符串&#xff0c;粘贴到左边&#xff0c;按下面Convert按钮 ③右边就是 生成的 实体类 &#xff0c;直接复制到 .cs文件内就能使用 ④或者点击 Zip As File 按钮&#xff0c;直接生成 N个.cs文…

编写 prometheus exporter监控 mysql group replication

用 prometheus 监控 mysql&#xff0c;之前用 mysqld_exporter 收集mysql 的监控指标&#xff0c;发现并没有 mysql 组复制状态的指标。只能自己收集了&#xff0c;编写脚本收集指标推送到 pushgateway&#xff0c;这个办法更简单但是扩缩容不是很方便。下面用 python 编写的一…

C++类模板初阶

目录 1. 泛型编程 概念&#xff1a; 2.函数模板 2.1函数摸版概念&#xff1a; 2.2函数模板格式 2.3函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3.类模板 3.1 类模板的定义格式 3.2类模板实现示例 3.3类模板的实例化 1. 泛型编程 概念&#xff1…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机本身的数据保存(CustomData)功能(Python)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机本身的数据保存&#xff08;CustomData&#xff09;功能&#xff08;Python&#xff09; Baumer工业相机Baumer工业相机的数据保存&#xff08;CustomData&#xff09;功能的技术背景CameraExplorer如何使用数据保存&#…

医院用过期药要赔偿多少?

法律规定&#xff0c;经营者提供商品或者服务有欺诈行为的&#xff0c;需要加倍赔偿&#xff0c;赔偿为消费者所购买商品的价款或者接受服务的费用的三倍。&#xff08;金额不足五百元的&#xff0c;为五百元。但是如果商家明知道是过期的&#xff0c;还是要卖&#xff0c;是可…

中秋节超市生鲜最全陈列指南

中秋节将至&#xff0c;超市提前布局中秋陈列&#xff0c;打好秋季营销第一战&#xff0c;中秋节期间&#xff0c;从小分类上说&#xff1a;结球类、调味类、豆类、精品蔬菜、茄果类的蔬菜销售需求比较旺盛的。 从蔬菜的单品上来数据分析得出结果是如下单品在节日期间销售上排…

使用docker-compose 搭建es集群

首先需要安装docker&#xff0c;这里就略过了 在第一台机器上创建 docker-compose.yml 文件内容如下&#xff1a; services:es:image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2container_name: esenvironment:- bootstrap.memory_locktrue- xpack.security.ena…

精准定位:数字化营销的策略基石

在当今数字化时代&#xff0c;营销环境发生了巨大变化。精准定位已成为数字化营销的关键策略基石&#xff0c;对于企业实现高效营销、提升市场竞争力至关重要。 一、精准定位的重要性 1. 提高营销效率&#xff1a;通过精准定位目标客户群体&#xff0c;企业能够将有限的营销资…

【数据集】部分SAR舰船数据集,用于目标检测

SAR舰船目标检测数据集 1、SSDD 原文&#xff1a;https://sci-hub.se/10.1109/BIGSARDATA.2017.8124934 下载连接&#xff1a;https://github.com/TianwenZhang0825/Official-SSDD/blob/main/README.md 数据介绍&#xff1a; 数量&#xff1a;1160 来源&#xff1a;RadarSat-…

Golang | Leetcode Golang题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; func countNumbersWithUniqueDigits(n int) int {if n 0 {return 1}if n 1 {return 10}ans, cur : 10, 9for i : 0; i < n-1; i {cur * 9 - ians cur}return ans }

大小端字节序存储介绍

我们知道整形在内存中的存储方式了&#xff0c;但是在VS编译器里发现好像顺序不一样&#xff0c;类如&#xff1a; 这里就涉及到大小端字节序存储了。 什么是大端小端 大端存储模式&#xff1a;是指数据的低位保存在内存的高地址中&#xff0c;数据的高位&#xff0c;保存在内…

《黑神话:悟空》的AI技术解析:游戏智能的新境界

2024 年 8 月的第三周&#xff0c;哪哪都是悟空的声音&#xff0c;让我一度想起当年国足打进世界杯&#xff0c;学校不上课组织看球的场景。 从我个人情感而言&#xff0c;《黑神话&#xff1a;悟空》带来的震撼&#xff0c;惊喜和冲击不亚于当年国足在世界杯赛场上跟巴西踢球。…

海康VisionMaster使用学习笔记16-使用通信切换方案

使用通信切换方案 在VisionMaster中&#xff0c;用户可以使用通信功能来进行方案的切换&#xff0c;该使用方式能提升生产现场的自动化程度&#xff0c;便于VisionMaster与其他设备进行协同操作。 本文介绍VisionMaster中使用通信切换方案的基本操作步骤。以VisionMaster 4.2…