LeetCode hot100---栈专题(C++语言)

news/2024/10/7 4:25:22 标签: leetcode, c++, 算法

1、有效的括号

(1)题目描述以及输入输出

(1)题目描述:
给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

 
(2)输入输出描述:
输入:s = "()"
输出:true

关键思路:
遍历字符串,如果是左括号就将对应的右括号入栈
如果是右括号,假如栈为空或者与栈顶元素不匹配,则认为不匹配,否则出战匹配成功
遍历完,栈为空则匹配

(2)代码块

class Solution {
public:
    bool isValid(string s) 
    {
        stack<int> sta;
        if (s.size() % 2 != 0)              // 有奇数个括号肯定不匹配
            return false; 
        for(int i = 0;i < s.size();i++)
        {
            if(s[i] == '(')
                sta.push(')');
            else if(s[i] == '[')
                sta.push(']');
            else if(s[i] == '{')    
                sta.push('}');                          // 左括号匹配完成

            else if(sta.empty() || s[i] != sta.top())   // 不匹配的两种情况
                return false;
            else                                        // 括号匹配栈顶元素出栈
                sta.pop();
        }
        return sta.empty();                             // 括号匹配之后判断栈内是否为空
    }
};

2、字符串解码

(1)题目描述以及输入输出

(1)题目描述:
给定一个经过编码的字符串,返回它解码后的字符串。
 
(2)输入输出描述:
输入:s = "3[a]2[bc]"
输出:"aaabcbc"

关键思路:
(1)碰到数字,num记录
(2)碰到字符,res记录
(3)碰到‘[’,num和res进栈
(4)碰到‘]’,取出栈顶数字,将res以倍数形式追加到栈顶字符串

(2)代码块

class Solution {
public:
    string decodeString(string s) 
    {
        int num = 0;        // 记录每次遍历的数字
        string res = "";    // 记录每次遍历的字符
        stack<int> nums;    // 数字栈
        stack<string> str;  // 字符栈

        for(int i = 0;i<s.size();i++)
        {
            if(s[i] >= '0' && s[i] <= '9')
                num =  s[i] - '0';

            else if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'))
                res = res + s[i];
            else if(s[i] == '[')
            {
                nums.push(num);
                num = 0;
                str.push(res);
                res  = "";
            }
            else if(s[i] == ']')
            {
                int times = nums.top();
                nums.pop();
                for(int i = 0;i<times;i++)
                {
                    str.top() += res;
                }
                res = str.top();
                str.pop();
            }
        }
        return res;
    }
};

3、每日温度

(1)题目描述以及输入输出

(1)题目描述:
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
 
(2)输入输出描述:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

关键思路:
暴力循环

(2)代码块

#include <vector>

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) 
    {
        int n = temperatures.size();
        vector<int> result(n, 0); 			// 初始化结果向量,大小与输入相同,初始值为0

        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (temperatures[j] > temperatures[i]) {
                    // 计算等待的天数
                    result[i] = j - i;
                    break; // 找到后可以跳出内层循环
                }
            }
        }
        
        return result; // 返回结果向量
    }
};


http://www.niftyadmin.cn/n/5692460.html

相关文章

Prometheus+Grafana备忘

Grafana安装 官网 https://grafana.com/grafana/download 官网提供了几种安装方式&#xff0c;我用最简单的 yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.2.2-1.x86_64.rpm启动 //如果需要在系统启动时自动启动Grafana&#xff0c;可以…

计算机毕业设计 智慧物业服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

强大的JVM监控工具

介绍 在生产环境中&#xff0c;经常会遇到各种各样奇葩的性能问题&#xff0c;所以掌握最基本的JVM命令行监控工具还是很有必要的 名称主要作用jps查看正在运行的Java进程jstack打印线程快照jmap导出堆内存映像文件jstat查看jvm统计信息jinfo实时查看和修改jvm配置参数jhat用…

k8s实战-1

k8s实战-1 一、资源创建方式1.命令行2.yaml 二、命名空间三、Pod总结 一、资源创建方式 1.命令行 就是直接通过命令的方式创建&#xff0c;比如我要创建namespace&#xff0c; kubectl create namespace hello删除&#xff1a; kubectl delete -f hello2.yaml 简单来说&am…

深入理解 C# 中的集合与数据结构

在日常开发中&#xff0c;集合与数据结构是处理数据的基础工具。C# 提供了一系列强大而灵活的集合类型&#xff0c;帮助我们存储、访问和管理数据。这篇文章将带你了解 C# 中常用的数组、列表、字典、队列、栈、集合和链表的特性和用法。 1. 数组&#xff08;Array&#xff09;…

毕设 基于大数据情感分析的网络舆情分析系统(源码+论文)

简介 今天学长向大家介绍一个大数据毕设项目 毕设分享 基于大数据情感分析的网络舆情分析系统(源码论文) &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 项目分享:见文末! 实…

FastAdmin Apache下设置伪静态

FastAdmin Apache下设置伪静态 一、引言 FastAdmin 是一个基于ThinkPHP和Bootstrap框架开发的快速后台开发框架&#xff0c;它以其简洁、高效、易于扩展的特点&#xff0c;广受开发者的喜爱。在部署FastAdmin项目时&#xff0c;为了提高访问速度和用户体验&#xff0c;我们通…

十大时间序列预测模型

目录 1. 自回归模型 原理 核心公式 推导过程: 完整案例 2. 移动平均模型 原理 核心公式 推导过程: 完整案例 3. 自回归移动平均模型 原理 核心公式 推导过程: 完整案例 4. 自回归积分移动平均模型 原理 核心公式 推导过程 完整案例 5. 季节性自回归积分…