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的更多相关文章

  1. [Java Basics] Stack, Heap, Constructor, I/O, Immutable, ClassLoader

    Good about Java: friendly syntax, memory management[GC can collect unreferenced memory resources], o ...

  2. js GC & stack heap

    js GC & stack heap stack 栈,函数执行形成执行栈帧,变量名,指针 heap 堆,非结构化的数据(Object),分配的内存的存储空间 js 垃圾回收机制 https:/ ...

  3. 笔记:程序内存管理 .bss .data .rodata .text stack heap

    1.未初始化的全局变量(.bss段) bss段用来存放 没有被初始化 和 已经被初始化为0 的全局变量.如下例代码: #include<stdio.h> int bss_array[102 ...

  4. Stack & Heap in Java

    Stack and Heap 都是Java用来在RAM中存放数据的地方.Java自动管理堆和栈,用户不能直接的设置堆或栈. Stack:存在于栈中的数据,其大小与生存周期是确定的,栈中的数据可以共享 ...

  5. Linux内存管理(text、rodata、data、bss、stack&heap)

    一.各内存区段的介绍 系统内的程序分为程序段和数据段,具体又可细分为一下几个部分: (1)text段-代码段 text段存放程序代码,运行前就已经确定(编译时确定),通常为只读,可以直接在ROM或Fl ...

  6. 栈 堆 stack heap

    点餐 做菜 Stack and Heap 堆和栈的区别 - Grandyang - 博客园 https://www.cnblogs.com/grandyang/p/4933011.html 在和计算机 ...

  7. Stack&Heap的理解

    Heap(堆):在英文中有杂乱的堆意思,意译中文为堆:其特点为先进先出. 堆空间分配:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表. Stack(栈):在英 ...

  8. 栈 堆 stack heap 堆内存 栈内存 内存分配中的堆和栈 掌握堆内存的权柄就是返回的指针 栈是面向线程的而堆是面向进程的。 new/delete and malloc/ free 指针与内存模型

    小结: 1.栈内存 为什么快? Due to this nature, the process of storing and retrieving data from the stack is ver ...

  9. 栈和堆(Stack && Heap)

    一.前言      直到现在,我们已经知道了我们如何声明常量类型,例如int,double,等等,还有复杂的例如数组和结构体等.我们声明他们有各种语言的语法,例如Matlab,Python等等.在C语 ...

  10. 【LeetCode】Heap

    [215] Kth Largest Element in an Array [Medium] 给个无序数组,返回第K大的数字. 方法1. 直接使用优先队列 priority_queue class S ...

随机推荐

  1. 关于用Java实现二维码的生成

    昨天晚上看了一个视频讲的是web端把名片搞成二维码的形式,觉得挺有意思的,不过我还是初学,所以就没在网页端实现,写了命令行程序. 虽然看着程序很短,不过写的过程中还是出了问题, 最致命的就是 Grap ...

  2. js中快速获取数组中的最大值最小值

    var a=[1,2,3,5]; alert(Math.max.apply(null, a));//最大值 alert(Math.min.apply(null, a)); //最小值 多维数组如下 v ...

  3. TCPCopy使用

      http://www.thinkingbar.com/2014/04/17/tcpcopy使用/ 主题 技术 一.应用背景 主要用于系统的稳定性测试.它可以复制线上服务器的请求,通过修改TCP/I ...

  4. SharePoint 2013 中的 PowerPoint Automation Services

    简介                许多大型和小型企业都将其 Microsoft SharePoint Server 库用作 Microsoft PowerPoint 演示文稿的存储库.所有这些企业在 ...

  5. [解决方案] pythonchallenge level 0

    http://www.pythonchallenge.com/pc/def/0.html 问题: 2^38 >>> 2**38 >>>274877906944L 输 ...

  6. CentOS下查看进程和删除进程

    1. 在 LINUX 命令平台输入 1-2 个字符后按 Tab 键会自动补全后面的部分(前提是要有这个东西,例如在装了 tomcat 的前提下, 输入 tomcat 的 to 按 tab).2. ps ...

  7. PHP 爬虫

    1.爬虫的本质简单来说,就是读取页面源代码,然后用正则匹配得到想要的数据. 示例如下: private function spider_jiuyou_list($listname,$url)    { ...

  8. WP7、WP8 格式化时间为距当前多少时间

    方法一: 使用 toolkit的 RelativeTimeConverter,使用方式 <phone:PhoneApplicationPage.Resources> <toolkit ...

  9. session在.ashx文件操作问题

    在.ashx一般处理文件中如果session没有继承System.Web.SessionState.IRequiresSessionState那么session只有读的权限,没有写的权限; sessi ...

  10. oracle的分析函数over 及开窗函数

    转:http://www.2cto.com/database/201310/249722.html oracle的分析函数over 及开窗函数   一:分析函数over   Oracle从8.1.6开 ...