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

博客围绕算法展开,提及用单调栈解决739. 每日温度和496. 下一个更大元素 I 两道题。其中每日温度是单调栈入门题,解题关键在于保证栈内元素单调递增。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接: 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;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值