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 ...
随机推荐
- css3的3D和2D
css3的3D旋转:rorateX():参数为正值时,盒子是围绕x轴,完成从Y轴正方向到Y轴负方向的旋转,视觉上呈现高度上的变化.rorateY():参数为正值时,盒子是围绕Y轴,完成从X轴正方向到X ...
- 1.6jdk + eclipse + pydev搭建Python开发环境
直接在1.6jdk的eclipse上用install new software的方法安装插件,会找不到安装好的插件.pydev官网还提供一种zip直接解压插件到eclipse文件夹下的dropins文 ...
- alpha值的问题
但凡图像都会涉及到透明度问题.使用透明度之后就可以看到多层图像.Alpha值就是用于描述透明度的参量.Alpha值是一个百分数,alpha=1表示源文件发出的光全部被观察者观察到. 既然是透明度,那么 ...
- NO.3 CAS配置问题汇总
1. webapp对接到CAS认证时,若CAS Server端的tomcat配置了SSL,则对接的webapp所在的JAVA环境要导入CAS Server端tomcat所用的CRT证书,Windows ...
- Android 简易崩溃日志保存
仅仅做了简单的保存到了本地而已: 根据需要可以继续增加功能: 下一次启动上传到服务器: 增加应用版本,机型系统版本信息等: public class CrashSaver { public stati ...
- 开源框架中常用的php函数
类的自动加载后直接实例化 //自动加载类 function my_autoloader($class) { include $class . 'Class.php'; } spl_autoload_r ...
- Efficiency Office Toolkit Clients
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Ftp&g ...
- android studio sdk 配置
android studio在启动后会一直处于 fetching Android sdk compoment information 状态 解决办法: 按照网友提供的方法: 第一步: 1)进入刚安装的 ...
- Spring Ioc代码阅读
1,理解控制反转 以前一直说着这个词,然后把它等于上ioc这个词,再等于上代码里一个bean里依赖了其他bean,不用new,用注解,用xml去描述,就可以了.能用就行了,实际理论的不管也不影响编 ...
- CKEditor使用配置方法
一.使用方法: 1.在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src= ...