今天是训练营第五十八天,是最后一天单调栈的开始
class Solution { public int[] dailyTemperatures(int[] temperatures) { int n = temperatures.length; int[] res = new int[n]; int[] stack = new int[n]; int top = -1; for(int i = n-1; i>=0; i--){ while(top >=0 &&temperatures[stack[top]]<=temperatures[i]){ top--; } res[i] = top == -1 ? 0: stack[top] -i; stack[++top] = i; } return res; } }
单调栈的模版题
class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { Stack<Integer> temp = new Stack<>(); int[] res = new int[nums1.length]; Arrays.fill(res,-1); HashMap<Integer, Integer> hashMap = new HashMap<>(); for (int i = 0 ; i< nums1.length ; i++){ hashMap.put(nums1[i],i); } temp.add(0); for (int i = 1; i < nums2.length; i++) { if (nums2[i] <= nums2[temp.peek()]) { temp.add(i); } else { while (!temp.isEmpty() && nums2[temp.peek()] < nums2[i]) { if (hashMap.containsKey(nums2[temp.peek()])){ Integer index = hashMap.get(nums2[temp.peek()]); res[index] = nums2[i]; } temp.pop(); } temp.add(i); } } return res; } }
题意比较难理解,要转化为单调栈问题
明天继续单调栈
标签:int,res,训练营,随想录,第五十八章,length,new,nums1,单调 From: https://www.cnblogs.com/catSoda/p/16971819.html