代码随想录算法训练营第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值
1.代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。2.代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II3.代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表 ,206.反转链表4.代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 142.环形链表II5.代码随想录算法训练营第六天| 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和6.代码随想录算法训练营第七天| 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和7.代码随想录算法训练营第八天| 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串8.代码随想录算法训练营第九天| 28. 实现 strStr() 459.重复的子字符串 字符串总结 双指针回顾9.代码随想录算法训练营第十天| 堆栈理论基础 232.用栈实现队列 225. 用队列实现栈
10.代码随想录算法训练营第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值
11.代码随想录算法训练营第十三天|239. 滑动窗口最大值 347.前 K 个高频元素 总结12.代码随想录算法训练营第十四天| 理论基础 递归遍历 迭代遍历 统一迭代13.代码随想录算法训练营第十五天| 层序遍历 10 226.翻转二叉树 101.对称二叉树 214.代码随想录算法训练营第十六天| 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数15.代码随想录算法训练营第十七天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和16.代码随想录算法训练营第十八天|● 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树17.代码随想录算法训练营第十九天|654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树18.代码随想录算法训练营第二十天|530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先19.代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点20.代码随想录算法训练营第二十三天|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇21.代码随想录算法训练营第二十四天|● 理论基础 ● 77. 组合22.代码随想录算法训练营第二十五天| 216.组合总和III 17.电话号码的字母组合23.代码随想录算法训练营第二十六天| 39. 组合总和 40.组合总和II 131.分割回文串24.代码随想录算法训练营第二十七天| 93.复原IP地址 78.子集 90.子集II25.代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列 47.全排列 II26.代码随想录算法训练营第三十天|回溯法总结27.代码随想录算法训练营第三十一天| 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和28.代码随想录算法训练营第三十二天| ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II29.代码随想录算法训练营第三十三天| ● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果30.代码随想录算法训练营第三十四天| ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球31.代码随想录算法训练营第三十六天| ● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间32.代码随想录算法训练营第三十七天| ● 738.单调递增的数字 ● 968.监控二叉树 ● 总结33.代码随想录算法训练营第三十八天| ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯34.代码随想录算法训练营第三十九天|● 62.不同路径 ● 63. 不同路径 II35.代码随想录算法训练营第四十天|● 343. 整数拆分 ● 96.不同的二叉搜索树36.代码随想录算法训练营第四十一天|01背包问题, 01背包问题—— 滚动数组,分割等和子集37.代码随想录算法训练营第四十三天|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零38.代码随想录算法训练营第四十四天|完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ39.代码随想录算法训练营第四十五天| ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数40.代码随想录算法训练营第四十六天| 139.单词拆分 多重背包 背包问题总结篇!41.代码随想录算法训练营第四十七天| ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III42.代码随想录算法训练营第四十八天| ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II43.代码随想录算法训练营第五十天| ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV44.代码随想录算法训练营第五十一天| ● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结45.代码随想录算法训练营第五十二天| ● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组46.代码随想录算法训练营第五十三天| ● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划47.代码随想录算法训练营第五十四天| ● 392.判断子序列 ● 115.不同的子序列48.代码随想录算法训练营第五十五天| ● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇49.代码随想录算法训练营第五十七天| 九章 动态规划part17 ● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇50.代码随想录算法训练营第五十八天|● 739. 每日温度 ● 496.下一个更大元素 I51.代码随想录算法训练营第五十九天|● 503.下一个更大元素II ● 42. 接雨水52.代码随想录算法训练营第六十天|● 84.柱状图中最大的矩形53.每日一题: 2192. 有向无环图中一个节点的所有祖先54.每日一题:1026. 节点与其祖先之间的最大差值55.每日一题:1483. 树节点的第 K 个祖先20. 有效的括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
思路:只是简单的模拟堆栈操作,我的做法并没有什么新意,评论区没有看到什么比较高效的写法,倒是有个用map容器解决的,看着还行。
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for(char &ch:s){
if(ch=='('||ch=='{'||ch=='['){
st.push(ch);
}
else{
if(st.empty())
return false;
else if(ch-st.top()>2||ch-st.top()<0){
return false;
}
else
st.pop();
}
}
if(st.empty())
return true;
else
return false;
}
};
1047. 删除字符串中的所有相邻重复项
给出由小写字母组成的字符串 S
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
思路:代码也很简单,每次入队都检查是否与前一项相同,如果相同就出栈并继续循环。最后用两个栈相互倒腾一下改变字符串顺序。
class Solution {
public:
string removeDuplicates(string s) {
stack<char> st;
stack<char> st1;
for(char &ch:s){
if(st.empty()||ch!=st.top()){
st.push(ch);
}
else{
st.pop();
}
}
while(!st.empty()){
st1.push(st.top());
st.pop();
}
string s1;
while(!st1.empty()){
s1+=st1.top();
st1.pop();
}
return s1;
}
};
竟然可以不用栈!
class Solution {
public:
string removeDuplicates(string s) {
string stk;
for (char ch : s) {
if (!stk.empty() && stk.back() == ch) {
stk.pop_back();
} else {
stk.push_back(ch);
}
}
return stk;
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/solutions/643955/shan-chu-zi-fu-chuan-zhong-de-suo-you-xi-4ohr/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
150. 逆波兰表达式求值
给你一个字符串数组 tokens
,表示一个根据 逆波兰表示法 表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。
注意:
- 有效的算符为
'+'
、'-'
、'*'
和'/'
。 - 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
- 两个整数之间的除法总是 向零截断 。
- 表达式中不含除零运算。
- 输入是一个根据逆波兰表示法表示的算术表达式。
- 答案及所有中间计算结果可以用 32 位 整数表示。
题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)
思路:主要卡在了不知道怎么把string转换成操作符,原来只是一个if判断。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for (int i = 0; i < tokens.size(); i++) {
if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
int num1 = st.top();
st.pop();
int num2 = st.top();
st.pop();
if (tokens[i] == "+") st.push(num2 + num1);
if (tokens[i] == "-") st.push(num2 - num1);
if (tokens[i] == "*") st.push(num2 * num1);
if (tokens[i] == "/") st.push(num2 / num1);
} else {
st.push(stoi(tokens[i]));
}
}
int result = st.top();
st.pop(); // 把栈里最后一个元素弹出(其实不弹出也没事)
return result;
}
};
作者:代码随想录
链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/solutions/1752027/by-carlsun-2-a0vh/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端