![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
栈
Ealiser
这个作者很懒,什么都没留下…
展开
-
LeetCode第402题移掉K位数字
算法单调栈、贪心核心思想第一个数字a直接入栈,其他数字b与已经入栈的数字进行比较,如果b < a,则a出栈,直到①栈为空;②b >= a;③已经删除了k个数字.此外还存在三个特殊情况:①删除的数字少于k,则从末尾删除;②存在零,删掉;③序列为空,返回0.我采用的思路是贪心加递归,从前k个数中选择一个最小的(从这里开始错误,因为不保证在剩下的地方能找到其他小的),然后依次找其他数字。此这种方法还存在一个问题就是递归无法解决0的问题。代码class Solution { .原创 2022-03-23 21:48:33 · 224 阅读 · 0 评论 -
LeetCode第234题 回文链表
算法栈核心思想因为不是部分存在回文,所以可以直接将一半放入栈中,然后依次出栈,与另外一半进行对比。需要特殊考虑的是奇偶问题。代码class Solution { public boolean isPalindrome(ListNode head) { int len = 0; ListNode tempHead = head; while(head !=null){ len++; head .原创 2022-03-17 11:46:15 · 487 阅读 · 0 评论 -
LeetCode第203题 移除链表元素
算法栈核心思想依次入栈,碰到相等的数就不用入栈了。然后依次出栈,利用一个temp结点保存上一个出栈的结点,与当前出栈结点建立连接。突然想起来用队列也可以。代码class Solution { public ListNode removeElements(ListNode head, int val) { if(head == null) return head; Stack<ListNode> st = new Stack<List.原创 2022-03-17 10:42:08 · 522 阅读 · 0 评论 -
LeetCode第641题 设计循环双端序列
算法辅助栈核心思想一个栈负责尾端进出,一个栈负责头端进出,由于两个栈相互转存,必然颠倒顺序,剩下的就很简单了。千万不要像我智障般的玩了半天双队列。计数部分使用了一个全局变量。代码class MyCircularDeque { Stack<Integer> qu1; Stack<Integer> qu2; int k; int num = 0; public MyCircularDeque(int k) { qu1 .原创 2022-03-16 19:53:28 · 1242 阅读 · 0 评论 -
LeetCode第232题 用栈实现队列
算法辅助栈核心思想利用辅助栈,原始栈用于push,辅助栈用于pop。每当有pop时,如果辅助栈中有数据,则直接pop。如果没有,则将原始栈中数据全部pop进辅助栈中。此外对于实现类型的题,需要首先声明全局变量,在构造器里需要对于全局变量进行赋值。3. 代码class MyQueue { Stack<Integer> push; Stack<Integer> pop; public MyQueue() { push = new .原创 2022-03-16 15:53:24 · 1175 阅读 · 0 评论 -
LeetCode第739题 每日温度
算法1.1递归1.2递减栈核心思想1.1最开始采用的递归的方法,但是这个方法在面对大量数据的时候存在内存不够的问题。1.2需要一个二维数组作为栈内保存的数据,[0]用来保存温度,[1]用来保存位置。每次输入的数据都与栈顶数据进行比对,栈顶数据大则输入数据入栈,小则出栈,并且在结果中写入位置(当前位置-栈顶数据位置).代码//递归方法 无效class Solution { public static int[] dailyTemperatures(int[] temperature.原创 2022-03-16 14:09:55 · 392 阅读 · 0 评论 -
LeetCode第946题 验证栈序列
算法正常直接用栈模拟就好,我用了HashSet+栈,比较复杂。核心思想常规方法是面对即将要出站的数字,如果是栈顶数字直接pop,如果不是就接着往里进。我的方法多考虑了我如何确定当前数字是否已经进栈。代码class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { HashSet<Integer> map = new HashSet<Integer.原创 2022-03-15 15:47:19 · 924 阅读 · 0 评论 -
LeetCode第155题 最小栈
算法数组栈核心思想本题的难点在于要求在常数时间内检索到最小元素的栈,那么代表不能在需要获取最小元素时再去处理,所以选择边存数据边获得最小值。这里的处理有两个方法:一个是数组栈,第一个位置保存栈首数字,第二个位置保存当前最小值;另外一个方法是辅助栈,即另外设计一个栈,用于保存最小的数字。代码很好实现。代码class MinStack { private Stack<int[]> stack; public MinStack() { stack = .原创 2022-03-15 13:59:37 · 646 阅读 · 0 评论 -
LeetCode第20题 有效的括号
算法栈核心思想括号的匹配是非常常见的和栈有关的题,括号的匹配很适合先入后出的思想。对于一个完美匹配的括号集,那必然存在如果前括号出现,令后括号入库,最后能完美匹配。否则则为false。代码class Solution { public boolean isValid(String s) { if(s.length() % 2 == 1) return false; Stack<Character> st = new Stack<Char.原创 2022-03-15 10:41:51 · 374 阅读 · 0 评论