当前位置: 首页 > news >正文

网站建设公司创业设计公司包装

网站建设公司创业,设计公司包装,wordpress批量导入用户,wordpress 插件 ftp目录 最小栈 栈的压入与弹出 逆波兰表达式 最小栈 155. 最小栈 - 力扣#xff08;Leetcode#xff09; 设计一个支持 push #xff0c;pop #xff0c;top 操作#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void …目录 最小栈 栈的压入与弹出 逆波兰表达式 最小栈 155. 最小栈 - 力扣Leetcode 设计一个支持 push pop top 操作并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。 刚刚开始我认为可以写一个栈存放数据一个int保存最小值但是如果最小值在栈中呗pop时我们就找不到之前的最小值了 设计双栈解决该问题 mini栈的栈顶就是最小值存放栈数据中的。 当我们栈pop时只需要比较是否与mini.top()是否相等相等mini.pop()否则不动 如果多次压入多个0最小值我们也需要在mini栈压入0。否者在栈pop最小值时会把mini唯一最小值删除但是pop的最小值是多个的数据会出错。 栈.pop()。是把0删除这次删除也会把mini栈0删除删除后mini.top2而实际栈最小数据0 所以我们需要在压入数据如果与mini.top相同或小于mini.top也压入数据。 这样如果我们删除栈.pop()此刻最小值依旧是0而mini.top()也为0。 假设极端情况最小值非常非常非常多最小值1有100w个 此时最小栈也要存放100w个1极大的浪费了空间所以我们使用计数器一个结构体里面保存最小值以及最小值数量 struct Intcount {Intcount(int x 0):_val(x), count(1){}int _val;int count; }; 使用计数器代替了stackint--stackIntcount 实现代码 struct Intcount {Intcount(int x 0):_val(x), count(1){}int _val;int count; };class MinStack { private: std::stackIntcount _minst;std::stackint st; public:void push(int val) {if (_minst.size() 0){_minst.push(val);st.push(val);}else{st.push(val);if (st.top() _minst.top()._val){_minst.top().count;}else if(st.top() _minst.top()._val){_minst.push(val);}}}void pop() {if (st.top() _minst.top()._val){--_minst.top().count;if (_minst.top().count 0){_minst.pop();}}st.pop();}int top() {return st.top();}int getMin() {return _minst.top()._val;} }; 栈的压入与弹出 栈的压入、弹出序列_牛客题霸_牛客网 (nowcoder.com) 输入两个整数序列第一个序列表示栈的压入顺序请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序序列4,5,3,2,1是该压栈序列对应的一个弹出序列但4,3,5,1,2就不可能是该压栈序列的弹出序列。 1. 0pushV.length  popV.length 1000 2. -1000pushV[i]1000 3. pushV 的所有数字均不相同 一句话判断出栈顺序是否合法。 开辟一个栈 将popV与pushV的数据拿出来将pushV的数据加载到栈中。 那栈顶的数据与popV的数据比较如果相等就pop栈顶数据并且popV的下标无论相等不相等都要一直载入pushV数据 直到栈.top()等于popV[j]此刻将栈顶删除并且j并且检查新栈top是否等于popV[j         ]  继续栈pop 这个时候检查栈是否有数据如果有数据就是错误的如果没有数据就是正确的。 代码 class Solution { public:bool IsPopOrder(vectorint pushV,vectorint popV) {stackint st;vectorint::size_type j0;for(size_t i0;ipushV.size();i){st.push(pushV[i]);while(!st.empty()popV[j]st.top()){st.pop();j;}}return st.empty();} }; 逆波兰表达式 150. 逆波兰表达式求值 - 力扣Leetcode 给你一个字符串数组 tokens 表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意 有效的算符为 、-、* 和 / 。每个操作数运算对象都可以是一个整数或者另一个表达式。两个整数之间的除法总是 向零截断 。表达式中不含除零运算。输入是一个根据逆波兰表示法表示的算术表达式。答案及所有中间计算结果可以用 32 位 整数表示。 建一个栈将数字字符串转换为整型然后存放到栈中如果遇见运算符字符串就将栈中取两个数据进行运行结果在压入栈中。 注意我们将使用switch判断表达式表达式不可能比对字符串但是可以比对整型字符char。所以我们将运算符字符串在比较时取第一个元素比较  char*ch  取ch[0]进行比较。 利用stoi函数将数字字符串转换为整型。 将“2”  和 “1”转换后压入栈中 继续将字符串“5”压入栈中 继续走遇见* 拿出数据5和3进行运算5为右操作数3为左操作数 j走到末尾此刻将栈.top取出的数据就是结果数据 class Solution { public:int evalRPN(vectorstring tokens) {stackint st;for(auto ch : tokens){if(ch||ch-||ch*||ch/){int num2st.top();st.pop();int num1st.top();st.pop();switch (ch[0]) {case :st.push(num1 num2);break;case -:st.push(num1 - num2);break;case *:st.push(num1 * num2);break;case /:st.push(num1 / num2);break;}}else{st.push(stoi(ch));}} return st.top();} };
http://www.dnsts.com.cn/news/77223.html

相关文章:

  • 做网站平台的营业执照弹性云主机做网站
  • 潍坊公司做网站广告图片怎么制作
  • 上海社保济南seo的排名优化
  • 网站建设都包括哪些内容全面的客户管理系统
  • 网站导流应该怎么做购物网站建设实训心得体会
  • 商城网站欣赏网站建设地位
  • 班级网站模板html最适合企业网站建设的cms系统
  • 网站建设计划设计方案网络营销哪家正规公司
  • 慈溪市网站开发大连网络营销师招聘网
  • 商丘市住房和城乡建设局网站做营销看的网站有哪些内容
  • 网站程序制作佛山新网站建设服务公司
  • 江西建设门户网站做营销的有那么网站
  • 个人建设网站需要什么证件吗网站建设教程搭建
  • 网站的特征网站半年了 没有流量
  • 淘宝店网站建设四川建筑工程网
  • 泉州专业网站建设哪家好贵州建设官方网站
  • 中山精品网站建设公司泰安房产网签住宅
  • 东莞企业网站排名centos 网站搭建
  • 鄂州北京网站建设wordpress 如何改中文字体
  • 网站建设 公司 天津c 做网站好嘛
  • 做游戏试玩网站企业型网站建设步骤及注意事项
  • 怎样用代码做网站一个主体可以备案几个网站
  • 网站开发中所需要的绘图工具wordpress4.8
  • 网站开发常用字体王占山将军简介
  • 网站浮动条进贤网站建设
  • 网站设计的开发工具和环境wordpress文章rss
  • 网站分类查询p2p提供网站建设违法
  • 北京做网站个人苏州门户网站建设
  • 西北网站建设做网站电商云数据库有用吗
  • 廊坊做网站厂商定制建筑设计学什么的