代码随想录算法训练营第58天|739. 每日温度,496.下一个更大元素 I (单调栈开始)

链接: 739. 每日温度
链接: 496.下一个更大元素 I

739. 每日温度

单调栈入门题

这题的关键时保证了栈内所有的元素都是单调递增的(单调栈)

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
         Deque<Integer> stack = new LinkedList<>();
         int[] res = new int[temperatures.length];
         stack.push(0);

         for(int i = 1; i < temperatures.length; i++){
             if(temperatures[i] <= temperatures[stack.peek()]){ // 当遍历的温度小于等于栈顶元素时则加入栈中
                 stack.push(i);
             }else{
                 while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){ // 当遍历的温度大于栈顶元素且栈不为空时则记录结果并将结果弹出
                    res[stack.peek()] = i - stack.peek();
                    stack.pop();
                 }
                 stack.push(i); // 当栈顶元素大于遍历的温度时则加入栈
             }
         }

         return res;
    }
}

496.下一个更大元素 I

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
          HashMap<Integer, Integer> map = new HashMap<>();
          Deque<Integer> stack = new LinkedList<>();
          stack.push(0);
          int[] res = new int[nums1.length];
          Arrays.fill(res, -1);

          for(int i = 0; i<nums1.length; i++){
              map.put(nums1[i], i);
          }

          for(int i = 1; i < nums2.length; i++){              
                  while(!stack.isEmpty() && nums2[i] > nums2[stack.peek()]){
                      if(map.containsKey(nums2[stack.peek()])){
                          int index = map.get(nums2[stack.peek()]);
                          res[index] = nums2[i];
                      }
                      stack.pop();
                  }
                  stack.push(i);
          }
        return res;

    }
}

你可能感兴趣的:(算法,java,动态规划)