栈
蛋卷在月球烤面包
这个作者很懒,什么都没留下…
展开
-
力扣162 寻找峰值
也许很多人看了,还是不懂,图解也只是迷迷糊糊根据答案来,我这里通俗解释以下,这道题,最最最重要的是条件,条件,条件,两边都是负无穷,数组当中可能有很多波峰,也可能只有一个,如果尝试画图,就跟股票信息一样,没有规律,如果根据中点値判断我们的二分方向该往何处取, 这道题还有只是返回一个波峰。你这样想,中点所在地方,可能是某座山的山峰,山的下坡处,山的上坡处,如果是山峰,最后会二分终止也会找到,关键是我们的二分方向,并不知道山峰在我们左边还是右边,送你两个字你就明白了,爬山(没错,就是带你去爬山),如果你往下..原创 2022-03-24 15:57:54 · 321 阅读 · 0 评论 -
力扣225 用队列实现栈
思路:使用两个队列,queue2负责接收新的数,然后使queue1里的所有数出队再入队到queue2,这样使得刚刚push的数在队首,方便pop和peek。class MyStack { Queue<Integer> queue1; Queue<Integer> queue2; public MyStack() { queue1=new LinkedList<>(); queue2=new LinkedL.原创 2022-03-21 14:01:27 · 135 阅读 · 0 评论 -
力扣224 基本计算器
思路:一个表达式分为三部分:左边表达式①,运算符③,右边表达式②一个只包含加减和括号的表达式,我们可以从左到右计算,遇到括号就先算括号里面的。具体来说就是先计算左边的表达式,再计算右边表达式,最后根据运算符,计算①和②的计算。public static int calculate(String s){ int res=0; int num=0; int sign=1; Stack<Integer> stack=n.原创 2022-03-21 13:48:23 · 196 阅读 · 0 评论 -
力扣402 移掉 K 位数字
思路:利用单调栈,每个数字都尝试入栈,但是如果栈顶比当前数字大,就需要弹出。public static String removeKdigits(String num, int k){ Deque<Character> stack=new ArrayDeque<>(num.length()); for(char c:num.toCharArray()){ while(k>0&&!stack.isEm.原创 2022-03-20 20:32:08 · 194 阅读 · 0 评论 -
力扣227 基本计算器 II
思路:利用辅助栈,并用preSign记录运算符号public int calculate(String s){ Stack<Integer> stack=new Stack<>(); int num=0; char preSign='+'; for(int i=0;i<s.length();i++){ if(Character.isDigit(s.charAt(i))){ .原创 2022-03-20 17:21:59 · 156 阅读 · 0 评论 -
力扣581 最短无序连续子数组
public int findUnsortedSubarray(int[] nums){ int max=nums[0]; int min=nums[nums.length-1]; int res; int start=0; int end=-1; for(int i=0;i<nums.length;i++){ if(nums[i]<max){ ...原创 2022-02-16 16:25:10 · 242 阅读 · 0 评论 -
力扣394 字符串解码
public String decodeString(String s){ Stack<Integer> numStack=new Stack<>(); Stack<String> strStack=new Stack<>(); StringBuilder res=new StringBuilder(); int num=0; for(int i=0;i<s.leng...原创 2022-02-16 12:25:38 · 194 阅读 · 0 评论 -
力扣234 回文链表
思路:采用一边倒转链表一边遍历,倒转一半就可以和后一半对比了。倒转链表用双指针来实现,遍历用另外的双指针来遍历,遍历用的快慢指针可以保证slow最后是指向后半部分的第一个结点。最后根据fast是否为空可以判断出链表结点数的奇偶。public boolean isPalindrome(ListNode head){ if(head==null||head.next==null) return true; ListNode fast=head; Lis.原创 2022-01-21 15:02:19 · 86 阅读 · 0 评论 -
力扣155 最小栈
方法一:辅助栈和数据栈同步class MinStack { Stack<Integer> data; Stack<Integer> helper; public MinStack() { data=new Stack<>(); helper=new Stack<>(); } public void push(int val) { data.add(val原创 2022-02-15 22:38:36 · 93 阅读 · 0 评论 -
单调栈类型题合集
单调栈分为单调递增栈和单调递减栈。操作规则:(下面都以单调递增栈为例)如果新的元素比栈顶元素大,就入栈如果新的元素较小,那就一直把栈内元素弹出来,直到栈顶比新元素小Stack<Integer> stack = new Stack<>();for(int i = 0; i < nums.size(); i++){ while(! stack.isEmpty() && stack.peek() > nums[i]) { st.pop(原创 2022-02-15 12:09:44 · 1069 阅读 · 0 评论 -
力扣42 接雨水
方法一:栈public int trap(int[] height){ if(height==null) return 0; int res=0; Stack<Integer> stack = new Stack<>(); for(int i=0;i<height.length;i++){ while(!stack.isEmpty()&&height[stack.p原创 2022-02-14 21:40:50 · 264 阅读 · 0 评论 -
有效括号问题合集
public boolean isValid(String s){ if(s.isEmpty()) return true; Stack<Character> stack=new Stack<>(); for(char c:s.toCharArray()){ if(c=='(') stack.push(')'); else if(c=='{') stack.push('}'); .原创 2022-02-13 19:29:34 · 326 阅读 · 0 评论 -
剑指31 栈的压入、弹出序列
public boolean validateStackSequences(int[] pushed, int[] popped){ Stack<Integer> stack=new Stack<>(); int i=0; for(int num:pushed){ stack.push(num); while(!stack.isEmpty()&&stack.peek()=.原创 2022-01-25 15:51:45 · 140 阅读 · 0 评论 -
剑指offer30 包含min函数的栈
class MinStack { Stack<Integer> A, B; public MinStack() { A = new Stack<>(); B = new Stack<>(); } public void push(int x) { A.add(x); if(B.empty() || B.peek() >= x) B.add(x);.原创 2022-01-25 15:43:24 · 146 阅读 · 0 评论 -
剑指offer9 用两个栈实现队列
LinkedList<Integer> A; LinkedList<Integer> B; public CQueue() { A=new LinkedList<>(); B=new LinkedList<>(); } public void appendTail(int value) { A.addLast(value); } pub...原创 2022-01-25 15:18:55 · 134 阅读 · 0 评论