单调栈
本专栏针对LeetCode里面出现的关于单调栈的题目进行讲解,由易到难一一剖析!
Luke@
这个作者很懒,什么都没留下…
展开
-
单调栈系列~LeetCode1019.链表的下一个更大的节点(中等)
思路: 将链表转换成列表存储,因为列表的查询速度快。 如果当前元素比栈顶元素的值还要大,并且栈不为空,那么一直弹栈,弹出来的元素对应的更大的数就是当前要进栈的数。 如果不满足上述条件就将当前元素的下标进栈。 如果所有元素都遍历结束,栈中还有元素,那么说明栈中的元素后面没有比他自己更大的元素。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;.原创 2020-12-05 20:26:59 · 202 阅读 · 1 评论 -
单调栈系列~LeetCode84.柱状图中最大的矩形(困难)
class Solution { public int largestRectangleArea(int[] heights) { int len = heights.length; int []left = new int[len]; int []right = new int[len]; Stack<Integer> stack = new Stack<>(); for(int i=0; i.原创 2020-12-02 17:17:44 · 143 阅读 · 0 评论 -
单调栈系列~LeetCode739.每日温度(中等)
实现思路: 利用单调栈的思路求出元素的下一个更大元素。 Stack用来存储数组下标。 当前元素的值大于栈顶元素 && 栈不为空 -> 将栈顶元素(index)弹出,栈顶的值对应的元素的下一个更大的元素是 当前元素。 不满足前一个条件的时候将当前元素的下标入栈。 class Solution { public int[] dailyTemperatures(int[] T) { Stack<Integer> stack = new Stack.原创 2020-12-02 16:35:30 · 119 阅读 · 0 评论 -
单调栈系列~LeetCode503.下一个更大元素II(中等)
class Solution { public int[] nextGreaterElements(int[] nums) { Stack<Integer> stack = new Stack<>(); int [] res = new int[nums.length]; for(int i=2*nums.length -1; i>=0; i--){ while(!stack.isEmpty() .原创 2020-12-02 15:50:36 · 121 阅读 · 0 评论 -
单调栈系列~LeetCode496.下一个更大元素I(简单)
实现思路: 1 2 class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { Stack<Integer> stack = new Stack<>(); Map<Integer, Integer> map = new HashMap<>(); for(int i=0; i<nums2.length;.原创 2020-12-02 11:10:10 · 131 阅读 · 0 评论