程式碼隨想錄訓練營第五十八章|單調棧
阿新 • • 發佈:2022-12-10
今天是訓練營第五十八天,是最後一天單調棧的開始
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; } }
題意比較難理解,要轉化為單調棧問題
明天繼續單調棧