LeetCode---Stack && Heap
402. Remove K Digits
思路:一次判断字符若比栈顶字符大则入栈,若小则pop,同时k--,直到k为0,注意最终k没有减为0或者中途栈为空或者最终结果前面带0的情况
public String removeKdigits(String num, int k) {
if(k == num.length()) return "0";
Stack<Character> s = new Stack<Character>();
int i = 0;
while(i < num.length()){
while(!s.isEmpty() && k > 0 && num.charAt(i) < s.peek()){
s.pop();
k--;
}
s.push(num.charAt(i));
i++;
}
StringBuffer str = new StringBuffer();
while(!s.isEmpty()){
str = str.append(s.pop());
}
str = str.reverse();
int j = 0;
while(j < str.length() && str.charAt(j) == '0'){
j++;
}
//有可能因为后面有递增序列k没有减为0
if(k > 0) return str.substring(0,str.length() - k);
//将前面的0去掉后有可能为""
return str.substring(j).equals("") ? "0" : str.substring(j);
}
224. Basic Calculator
思路:用sign标记前面的运算符,用result标记括号中的结果,每次遇到'('则将sign和result入栈并reset,遇到')'则计算结果
public int calculate(String s) {
int result = 0;
int sign = 1;
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0; i < s.length(); i++){
if(Character.isDigit(s.charAt(i))){
//直接计算括号中的运算
int num = s.charAt(i) - '0';
while(i + 1 < s.length() && Character.isDigit(s.charAt(i + 1))){
num = num * 10 + (s.charAt(i + 1) - '0');
i++;
}
result += num * sign;
}
else if(s.charAt(i) == '+') sign = 1;
else if(s.charAt(i) == '-') sign = -1;
else if(s.charAt(i) == '('){
stack.push(result);
stack.push(sign);
result = 0;
sign = 1;
}
else if(s.charAt(i) == ')'){
result = result * stack.pop() + stack.pop();
}
}
return result;
}
总结
232. Implement Queue using Stacks:用两个栈实现队列
225. Implement Stack using Queues:用两个队列实现栈
150. Evaluate Reverse Polish Notation:遇到运算符则获取两个数进行运算以后入栈
341. Flatten Nested List Iterator:从后往前入栈,然后每次讲顶上的list转化为Integer入栈
239. Sliding Window Maximum:用优先队列将个窗口放入然后取出最大值
373. Find K Pairs with Smallest Sums:用优先队列将所有组合放入,然后取出前k个最小的
215. Kth Largest Element in an Array:用优先队列放入所有元素,取出第K大的,用优先队列比用快速排序快很多
训练
155. Min Stack:使用栈每次存当前最小值和入栈的元素,更新最小值
331. Verify Preorder Serialization of a Binary Tree:每次入栈同时出现两个'#'则出栈上一个元素并入一个'#',最后栈中只有一个'#'则返回true,注意中途判断栈空
394. Decode String:遇到']'才开始一次出栈,先获取需要被重复的字符串,然后获取次数,再入栈
295. Find Median from Data Stream:用两个优先队列min和max,保证每个队列都有一半元素且min中的元素比max中的小
提示
使用栈注意在中途出栈时判断栈空
LeetCode---Stack && Heap的更多相关文章
- [Java Basics] Stack, Heap, Constructor, I/O, Immutable, ClassLoader
Good about Java: friendly syntax, memory management[GC can collect unreferenced memory resources], o ...
- js GC & stack heap
js GC & stack heap stack 栈,函数执行形成执行栈帧,变量名,指针 heap 堆,非结构化的数据(Object),分配的内存的存储空间 js 垃圾回收机制 https:/ ...
- 笔记:程序内存管理 .bss .data .rodata .text stack heap
1.未初始化的全局变量(.bss段) bss段用来存放 没有被初始化 和 已经被初始化为0 的全局变量.如下例代码: #include<stdio.h> int bss_array[102 ...
- Stack & Heap in Java
Stack and Heap 都是Java用来在RAM中存放数据的地方.Java自动管理堆和栈,用户不能直接的设置堆或栈. Stack:存在于栈中的数据,其大小与生存周期是确定的,栈中的数据可以共享 ...
- Linux内存管理(text、rodata、data、bss、stack&heap)
一.各内存区段的介绍 系统内的程序分为程序段和数据段,具体又可细分为一下几个部分: (1)text段-代码段 text段存放程序代码,运行前就已经确定(编译时确定),通常为只读,可以直接在ROM或Fl ...
- 栈 堆 stack heap
点餐 做菜 Stack and Heap 堆和栈的区别 - Grandyang - 博客园 https://www.cnblogs.com/grandyang/p/4933011.html 在和计算机 ...
- Stack&Heap的理解
Heap(堆):在英文中有杂乱的堆意思,意译中文为堆:其特点为先进先出. 堆空间分配:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表. Stack(栈):在英 ...
- 栈 堆 stack heap 堆内存 栈内存 内存分配中的堆和栈 掌握堆内存的权柄就是返回的指针 栈是面向线程的而堆是面向进程的。 new/delete and malloc/ free 指针与内存模型
小结: 1.栈内存 为什么快? Due to this nature, the process of storing and retrieving data from the stack is ver ...
- 栈和堆(Stack && Heap)
一.前言 直到现在,我们已经知道了我们如何声明常量类型,例如int,double,等等,还有复杂的例如数组和结构体等.我们声明他们有各种语言的语法,例如Matlab,Python等等.在C语 ...
- 【LeetCode】Heap
[215] Kth Largest Element in an Array [Medium] 给个无序数组,返回第K大的数字. 方法1. 直接使用优先队列 priority_queue class S ...
随机推荐
- html页面3秒后自动跳转的方法有哪些
在进行web前端开发实战练习时,我们常常遇到一种问题就是,web前端开发应该如何实现页面N秒之后自动跳转呢?通过查找相关html教程,总结了3个方法: 方法1: 最简单的一种:直接在前面<hea ...
- Python Beautiful Soup学习之HTML标签补全功能
Beautiful Soup是一个非常流行的Python模块.该模块可以解析网页,并提供定位内容的便捷接口. 使用下面两个命令安装: pip install beautifulsoup4 或者 sud ...
- cocos2d-x创建项目
2.0之后的创建项目方法 第一步,首先 cd cocos2d-x-2.2.1/tools/project-creator/ 第二步, ./create_project.py -project Hell ...
- Android实战技巧:ViewStub的应用
在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局.那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在 ...
- iOS应用性能调优好文mark
http://www.cocoachina.com/ios/20150408/11501.html
- arch安装
[archwiki-install]: (https://wiki.archlinux.org/index.php/Installation_guide) uefi+gpt Gummiboot #se ...
- 【转】 修改vs2010帮助文档(MSDN)路径
VS2010的MSDN采用代理网页的方式,规定首次确定目录后不能更改本地Help Library的路径,只好手动变更路径 第一步: 先把MSDN装好,先装在C盘,默认的路径 第二步 现在我要把MSDN ...
- 关于JAVA中对字符串与数组求长度的问题
我在学习中发现在求数组或者字符串的长度的时候,用到length的时候,有时候是length,有时候是length(),很是奇怪,于是上API查了一下,发现一些小细节. 首先看看这段代码 public ...
- GTC China 2016观感
上周二在北京参加了GTC China 2016,最大的感受就是一个字,“冷”!黄教主一如既往坚持机车皮夹克装,9月中旬的北京还没有那么的冷啊,感觉全场的空调简直是为他而开...好的,以上吐槽完毕,接着 ...
- IOS中程序如何进行推送消息(本地推送,远程推送)
[1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...