最新要闻
- 观点:确认引进内地!《小美人鱼》新泄露镜头:爱丽儿深情抚摸王子的脸
- 全球首个商用海底数据中心在海南下水:算力高、散热不费电
- 今日关注:不挑路面、转得很稳 仰望U8如何实现原地掉头?官方详解
- 大学生应聘饭店洗碗工被HR婉拒 HR:第一份工作很重要 这会害了他
- 不等发布会!vivo X Fold2真机抢先看:素皮+玻璃设计惊艳
- 现场丨圆桌对话:抓住确定性——楼宇经济的大周期和小趋势
- 天天热文:内存/SSD白菜价甩卖 美光芯片大减产:工厂停机率创纪录
- 任泽平:在中国做生意没任何理由抱怨 燃油车正迎来诺基亚时刻
- 世界新资讯:宏碁推出W系列4K电视:QLED面板、30W扬声器
- 油价“二连降” 今年来最大降幅!加满一箱油少花13元
- 保姆级教程!12306官方详解“免费坐高铁”
- 环球速递!RTX 40系显卡才能“撑得住”!《赛博朋克2077》实现路径光追
- 夏季必备 圈叉潮品纯棉印花T恤/短裤24.9元起
- 【新视野】编程神童立志写最棒的程序改变世界 严重偏科只能选职高 妈妈无奈
- 世界视讯!成龙自豪发声:不是我要去好莱坞 而是好莱坞要我
- “19鑫苑01”到期日期将延期一年
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前焦点!Leetcode Practice --- 栈和队列
- 155. 最小栈
- 思路解析
- 20. 有效的括号
- 思路解析
- 1047. 删除字符串中的所有相邻重复项
- 思路解析
- 1209. 删除字符串中的所有相邻重复项 II
- 思路解析
- 删除字符串中出现次数 >= 2 次的相邻字符
- 剑指 Offer 09. 用两个栈实现队列
- 239. 滑动窗口最大值
- 思路解析
155. 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
【资料图】
实现 MinStack 类:
- MinStack() 初始化堆栈对象。
- void push(int val) 将元素val推入堆栈。
- void pop() 删除堆栈顶部的元素。
- int top() 获取堆栈顶部的元素。
- int getMin() 获取堆栈中的最小元素。
提示:
\(-2^{31}\) <= val <= \(2^{31}\) - 1
pop、top 和 getMin 操作总是在 非空栈 上调用
push, pop, top, and getMin最多被调用 \(3 * 10^4\) 次
思路解析
因为会不断的入栈和出栈,那就要保证,不论入栈还是出栈,我时刻知道,到栈中当前位置的最小值是谁。
["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]
对于上述输入,-2入栈时,最小值是-2,0入栈是,最小值是-2,-3入栈是最小值是-3
也就是我需要两个栈,一个栈用于存储元素,完成元素的push和pop操作;一个栈用于存储当前最小值,如果最小值更新就存入最小栈。
class MinStack {public: MinStack() { } void push(int val) { if (val <= getMin()) { minStack.emplace(val); } valStack.emplace(val); } void pop() { if (valStack.empty()) { return; } int ret = valStack.top(); valStack.pop(); if (ret == getMin()) { minStack.pop(); } } int top() { return valStack.top(); } int getMin() { if (minStack.empty()) { return INT_MAX; } return minStack.top(); }private: stack valStack; stack minStack;};
20. 有效的括号
给定一个只包括 "(",")","{","}","[","]" 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
思路解析
将匹配项做一个map单独存储,这样子有更好的扩展性。
遇到左括号就入栈,遇到右括号,判断是否与栈顶元素配对,配上就出栈,否则就返回false。
class Solution {public: bool isValid(string s) { stack bracketsStack; for (auto &iter : s) { // 遇到左括号就入栈,遇到右括号,判断栈顶是否为其对应的左括号,如果是则出栈 if (typeMap.count(iter) != 0) { bracketsStack.emplace(iter); } else { if (bracketsStack.empty() || iter != typeMap[bracketsStack.top()]) { return false; } bracketsStack.pop(); } } if (bracketsStack.empty()) { return true; } return false; }private: unordered_map typeMap = { {"(", ")"}, {"[", "]"}, {"{", "}"} };};
1047. 删除字符串中的所有相邻重复项
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
输入:"abbaca"输出:"ca"输入:"abbbaca"输出:"abaca"
思路解析
string提供了两个操作
- front:访问第一个字符
- back:查询最后一个字符
- pop_back:弹出尾巴字符,实现:length - 1即可
- push_back:插入元素
string removeDuplicates(string s) { string res; for (auto &iter : s) { if (!res.empty() && iter == res.back()) { res.pop_back(); } else { res.push_back(iter); } } return res;}
1209. 删除字符串中的所有相邻重复项 II
给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。
你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。
在执行完所有删除操作后,返回最终得到的字符串。
输入:s = "deeedbbcccbdaa", k = 3输出:"aa"解释: 先删除 "eee" 和 "ccc",得到 "ddbbbdaa"再删除 "bbb",得到 "dddaa"最后删除 "ddd",得到 "aa"
思路解析
遍历到某个字符的时候,判断当前字符与栈顶字符是否相同
- 如果不同,则直接入栈并开始计数
- 如果相同,则判断当前栈顶元素累积了多少个该元素,如果累积的个数小于k-1,则继续累积,如果累积到了k-1个,当前又相同了,那么栈顶元素就可以弹出了。
string removeDuplicates(string s, int k) { stack> pairStack; // 每个元素存储当前的元素及有几个连续的值 for (size_t i = 0; i < s.length(); i++) { if (!pairStack.empty() && pairStack.top().first == s[i]) { // 此时,看一下栈中是否已经有k-1个s[i]相同的元素,如果有,则pop出这k-1个,如果没有,则push进去 if (pairStack.top().second == k - 1) { pairStack.pop(); } else { pairStack.top().second++; } } else { pairStack.emplace(std::pair(s[i], 1)); } } string res; while(!pairStack.empty()) { while (pairStack.top().second-- > 0) { res += pairStack.top().first; } pairStack.pop(); } reverse(res.begin(), res.end()); return res;}
删除字符串中出现次数 >= 2 次的相邻字符
第二次出现的时候,说明出现次数大于2了,这时候就可以删除了,同时跳过s中后续与当前字符相同的元素即可。
string removeDuplicates(string s, int k) { string res; // 每个元素存储当前的元素及有几个连续的值 for (size_t i = 0; i < s.length(); ) { if (!res.empty() && res.back() == s[i]) { // 此时,说明已经出现过的字符第二次出现了 char currChar = s[i]; while(s[i] == currChar) { // 跳过s中其他相同的字符 i++; } res.pop_back(); } else { res.push_back(s[i]); i++; } } return res;}
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
class CQueue {public: CQueue() { } void appendTail(int value) { stackIn.emplace(value); } int deleteHead() { if (stackOut.empty()) { while (!stackIn.empty()) { stackOut.emplace(stackIn.top()); stackIn.pop(); } } if (stackOut.empty()) { return -1; } auto ret = stackOut.top(); stackOut.pop(); return ret; }private: stack stackOut; // 输出栈,元素按照输入顺序的栈 stack stackIn; // 输入元素存放栈,与输入顺序相反的栈};
239. 滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7
思路解析
假设窗口为[left, right],那么只要nums[i]比nums[j]小,则nums[i]就不纳入考虑范围。所以,当right进入窗口的时候,前面比nums[right]小的元素统统可以移除考虑范围了;这样子,留下的元素是从大到小有序的。
因为我们要移除比当前元素小的元素,也要获取最大的元素作为当前窗口最大值,因此,可以使用双端队列来实现。
// 移除比当前元素小的所有元素,只留下比当前元素大的元素while (!dQ.empty() && nums[i] >= nums[dQ.back()]) { dQ.pop_back();}// 获取当前窗口最大值,放入结果中resVec.emplace_back(nums[dQ.front()]);// 如果最大值应该要移除了,则移除if (dQ.front() + k <= i) { dQ.pop_front();}
完整的实现代码如下:
vector maxSlidingWindow(vector& nums, int k) { deque dQ; for (size_t i = 0; i < k; i++) { // 当前队列中仅保留比当前元素大的元素的位置,队列中下标对应的元素由大到小 while (!dQ.empty() && nums[i] >= nums[dQ.back()]) { dQ.pop_back(); } dQ.emplace_back(i); } vector resVec = {nums[dQ.front()]}; for (size_t i = k; i < nums.size(); i++) { // 当前队列中仅保留比当前元素大的元素的位置 while (!dQ.empty() && nums[i] >= nums[dQ.back()]) { dQ.pop_back(); } dQ.emplace_back(i); if (dQ.front() <= i - k) { dQ.pop_front(); } resVec.emplace_back(nums[dQ.front()]); } return resVec;}
需要完整版练习笔记,可关注公众号后台私信~~
关键词:
-
当前焦点!Leetcode Practice --- 栈和队列
155 最小栈设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。实现MinStack类:Min...
来源: 当前焦点!Leetcode Practice --- 栈和队列
我的第一个项目(七):(解决问题)Vue中canvas无法绘制图片
观点:确认引进内地!《小美人鱼》新泄露镜头:爱丽儿深情抚摸王子的脸
全球首个商用海底数据中心在海南下水:算力高、散热不费电
今日关注:不挑路面、转得很稳 仰望U8如何实现原地掉头?官方详解
大学生应聘饭店洗碗工被HR婉拒 HR:第一份工作很重要 这会害了他
不等发布会!vivo X Fold2真机抢先看:素皮+玻璃设计惊艳
现场丨圆桌对话:抓住确定性——楼宇经济的大周期和小趋势
讯息:awk 处理 Git 提交信息生成 Release Note
最长上升子序列 II
视焦点讯!day3 函数的定义和调用,练习编写简单的程序(记录1)
天天热文:内存/SSD白菜价甩卖 美光芯片大减产:工厂停机率创纪录
任泽平:在中国做生意没任何理由抱怨 燃油车正迎来诺基亚时刻
世界新资讯:宏碁推出W系列4K电视:QLED面板、30W扬声器
油价“二连降” 今年来最大降幅!加满一箱油少花13元
【全球热闻】网络时钟同步设备(NTP时间同步服务器)技术设计应用方案
全球实时:记录--你可能忽略的10种JavaScript快乐写法
聚焦:无所畏惧的求和题解
今亮点!商品日报(3月31日):焦炭低位反弹菜油补涨 纸浆、玻璃主力合约跌超2%
保姆级教程!12306官方详解“免费坐高铁”
环球速递!RTX 40系显卡才能“撑得住”!《赛博朋克2077》实现路径光追
夏季必备 圈叉潮品纯棉印花T恤/短裤24.9元起
【新视野】编程神童立志写最棒的程序改变世界 严重偏科只能选职高 妈妈无奈
世界视讯!成龙自豪发声:不是我要去好莱坞 而是好莱坞要我
“19鑫苑01”到期日期将延期一年
Excel批量检查5列数据是否一致(存在不规则空值)
【密码管理器】上海道宁为您提供存储和使用强密码的简单方法工具软件——1Password
【环球报资讯】MQTT协议介绍
世界热资讯!开心档之Go 语言环境安装
DIM中的一些知识点(慢更)
新消息丨每日机构分析:3月31日
全球实时:国家发展改革委:国内汽、柴油价格每吨分别降低335元和320元
焦点简讯:吃日料、听京剧 库克时隔3年再访中国:6年前还去过ofo小黄车总部
全球观焦点:酷派新品发布会定档4月3日:三款新机待发
世界聚焦:2023增长最快的手机品牌!一加Ace 2首销日销量在第三方平台遥遥领先
天天观察:B站弹幕射击《爆裂魔女》5月30日停运 共运营592天
任天堂Switch 2不会远了!开发者已收到新主机开发工具
世界信息:周日阳光可期抓紧洗晒 下周四冷空气再袭降水将达到中雨
每日快讯!卸载SQL Server 2012图文教程
环球报道:你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!
天天新动态:Python 数字类型之 int float
每日观点:收评:两市红盘震荡创指涨0.69% 人工智能板块涨幅居前
世界百事通!比亚迪F品牌再曝谍照 主攻40-60万市场/下半年预售
天天资讯:38岁985文科硕士被迫送外卖!本人再发声:已脱下孔乙己长衫 应聘道士被拒
云南一县城禁止“脏车入城”:有明显污迹、车轮粘泥不许在城区行驶
百元就能畅享8K 流畅清爽无广告!当贝盒子H3视频评测
当前快讯:刘浩存在新片《龙马精神》首映礼上哭了:感谢成龙带自己拍戏
环球今头条!GPT-4被指威胁公共安全!OpenAI遭第三方组织投诉
基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试 - 2/3
【焦点热闻】如何实现根据环境切换不同配置?
数据丢失不用怕,火山引擎 DataLeap 提供排查解决方案
英特尔以强大产品力,迎接生成式AI的广阔机遇
【全球快播报】北京启动存量住房交易“带押过户”模式
热消息:直播间卖卫星 最低200万!罗永浩:真的 把卫星价格打下来
Redmi Note 12 Turbo晒战绩:16GB+1TB开售5分钟超过全行业历史销量之和
每日热闻!这就离谱!A7S3传感器用来拍Vlog 索尼ZV-E1开启预售
vivo X Fold2影像曝光:IMX866主摄、潜望长焦取消
天天实时:一键获取测试脚本,轻松验证“TSBS 时序数据库性能基准测试报告”
天天快看点丨windows系统 批量处理文件名称
Python Django投稿系统代码
环球今头条!日本最早将于2024年度在新东名高速公路部分区间设置自动驾驶车道
环球即时看!小姐姐秒种草!雅迪冠能摩登发布:独创复古女王风
当前速讯:你家乡上榜没?中国省级“癌症地图”出炉:肺癌列第一 “穷癌”下降“富癌”上升
3299元性价比封神!AMD Zen4 104MB缓存锐龙7 7800X3D价格公布
迅雷临时文件读取错误怎么回事?迅雷临时文件读取错误怎么解决?
色带打印机怎么换色带?色带的正确安装方法是什么?
win10版本号与操作系统版本号有什么区别?怎么查看win10版本号?
英雄联盟狮子狗叫什么?英雄联盟狮子狗连招介绍
诺基亚X3上市时间是什么时候?诺基亚X3手机参数
CloudCanal 落地 DB2 数据迁移同步功能
观天下!hdfs disk balancer 磁盘均衡器
全球百事通!Python 应用 - jieba 分词 1:进行批量文本分词_艽野尘梦 better 的博客 - CSDN 博客
全球滚动:数论分块简介
【速看料】Mysql之SQL语句基础1
环球快报:2磅蛋糕是几寸适合多少人吃_2磅蛋糕是几寸
新消息丨贾跃亭宣布历史时刻:为梦想窒息FF 91量产!老外狠拆台展示车架或未全面投产
Windows 11 2024版发布了!首个官方ISO镜像免费下载
环球观点:调查显示:超半数受访者认为学历还是敲门砖
环球今热点:男子将父亲骨灰撒入大海被抓?为啥不能私自撒?
全球消息!庆祝索尼第一方游戏登陆XGP:微软推出Xbox限定主机
交互触摸大屏概念整理
速讯:全网最全的权限系统设计方案,不接受反驳!
要闻速递:[Redis]Redis概述
JSON多层嵌套复杂结构数据扁平化处理转为行列数据
微速讯:飞沫传播图片_飞沫传播
每日讯息!【财经分析】“意料之中”与“预期之外” 一季度债市踌躇中展现韧性
国产商用卫星上架电商:折后200万起
全球讯息:双电机三把锁!比亚迪F品牌“SF”谍照再曝光:或于6月发布
天天通讯!43万起 新一代长轴版奔驰GLC开售 网友:给我一个不买理想L9的理由
当前信息:《流浪地球2》摄影指导:没觉得中国电影比别人差
焦点热议:广东检出1例“恐龙血”:Hh孟买血型系统 比Rh还稀有
宿州埇桥:烧鸡展翅飞出一片“新天地”
Twitter营销教程_编程入门自学教程_菜鸟教程-免费教程分享
世界速递!skywalking插件工作原理剖析
全网最详细中英文ChatGPT-GPT-4示例文档-类比语句智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命
全球观察:利用Jackson序列化实现数据脱敏
特斯拉Model 3起火殃及宝马新车 车主索赔法院如此判决
新疆阿瓦提长绒棉:清爽透气纯棉背心9.9元/件狂促
小伙戒指卡手遇130名消防员演训:正好现场教学 科普一定不能硬拽
每日热门:城会玩!印度法官无法判决向ChatGPT求助 专家称或成全球法院系统标配