当前位置: 首页 > news >正文

Day37 | 739. 每日温度、496. 下一个更大元素 I、503. 下一个更大元素 II、42. 接雨水、84. 柱状图中最大的矩形

739. 每日温度

题目链接:739. 每日温度 - 力扣(LeetCode)

题目难度:中等

代码:

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int lens=temperatures.length;
        int[] res=new int[lens];
        Deque<Integer> stack=new LinkedList<>();
        for(int i=0;i<lens;i++){
            while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){
                res[stack.peek()]=i-stack.peek();
                stack.pop();
            }
            stack.push(i);
        }
        return res;
    }
}

496. 下一个更大元素 I

题目链接:496. 下一个更大元素 I - 力扣(LeetCode)

题目难度:简单

代码:

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        HashMap<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums1.length;i++)
            map.put(nums1[i],i);
        int[] res=new int[nums1.length];
        Stack<Integer> stack=new Stack<>();
        Arrays.fill(res,-1);
        for(int i=0;i<nums2.length;i++){
            while(!stack.isEmpty()&&nums2[stack.peek()]<nums2[i]){
                int pre=nums2[stack.pop()];
                if(map.containsKey(pre))
                    res[map.get(pre)]=nums2[i];
            }
            stack.push(i);
        }
        return res;
    }
}

503. 下一个更大元素 II

题目链接:503. 下一个更大元素 II - 力扣(LeetCode)

题目难度:中等

代码:

class Solution {
    public int[] nextGreaterElements(int[] nums) {
        int[] res=new int[nums.length];
        Arrays.fill(res,-1);
        Stack<Integer> stack=new Stack<>();
        for(int i=0;i<nums.length*2;i++){
            while(!stack.isEmpty()&&nums[i%nums.length]>nums[stack.peek()]){
                res[stack.peek()]=nums[i%nums.length];
                stack.pop();
            }
            stack.push(i%nums.length);
        }
        return res;
    }
}

42. 接雨水

题目链接:42. 接雨水 - 力扣(LeetCode)

题目难度:困难

代码:

class Solution {
    public int trap(int[] height) {
        int size=height.length;
        if(size<=2) return 0;
        Stack<Integer> stack=new Stack<>();
        stack.push(0);
        int sum=0;
        for(int i=0;i<size;i++){
            int stackTop=stack.peek();
            if(height[i]<height[stackTop])
                stack.push(i);
            else if(height[i]==height[stackTop]){
                stack.pop();
                stack.push(i);
            }else{
                int heightAtIdx=height[i];
                while(!stack.isEmpty()&&(heightAtIdx>height[stackTop])){
                    int mid=stack.pop();
                    if(!stack.isEmpty()){
                        int left=stack.peek();
                        int h=Math.min(height[left],height[i])-height[mid];
                        int w=i-left-1;
                        sum+=h*w;
                        stackTop=stack.peek();
                    }
                }
                stack.push(i);
            }
        }
        return sum;
    }
}

84. 柱状图中最大的矩形

题目链接:84. 柱状图中最大的矩形 - 力扣(LeetCode)

题目难度:困难

代码:

class Solution {
    public int largestRectangleArea(int[] heights) {
        Stack<Integer> st = new Stack<Integer>();
        int [] newHeights = new int[heights.length + 2];
        newHeights[0] = 0;
        newHeights[newHeights.length - 1] = 0;
        for (int index = 0; index < heights.length; index++){
            newHeights[index + 1] = heights[index];
        }
        heights = newHeights;
        st.push(0);
        int result = 0;
        for (int i = 1; i < heights.length; i++) {
            if (heights[i] > heights[st.peek()]) {
                st.push(i);
            } else if (heights[i] == heights[st.peek()]) {
                st.pop(); 
                st.push(i);
            } else {
                while (heights[i] < heights[st.peek()]) { 
                    int mid = st.peek();
                    st.pop();
                    int left = st.peek();
                    int right = i;
                    int w = right - left - 1;
                    int h = heights[mid];
                    result = Math.max(result, w * h);
                }
                st.push(i);
            }
        }
        return result;
    }
}

相关文章:

  • PH热榜 | 2025-03-19
  • Windows10抓包工具Wireshark下载、安装、使用
  • Java基础面试题学习
  • selenium(鼠标操作、页面操作、用例设计)
  • BYU-YOLO数据格式准备
  • 群体智能优化算法-灰狼优化算法(Grey Wolf Optimizer, GWO,含Matlab源代码)
  • 【时时三省】(C语言基础)习题:分析一个程序
  • 深入理解traceroute命令及其原理
  • 药房链路轨道“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用
  • 大模型应用中如何保持实时性和多人对话一致性问题?
  • 蓝桥杯练习day2:拿硬币
  • Linux日志管理
  • 微分方程求解及推导过程
  • 华为欧拉 22.03 版本部署 nginx
  • 【AIGC前沿】MiniMax海螺AI视频——图片/文本生成高质量视频
  • NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL
  • string练习题
  • 并发编程面试题三
  • MCP技术将重塑 SaaS 与 AI 的协作范式
  • 【操作系统】进程间通信方式
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 绿景中国地产:洛杉矶酒店出售事项未能及时披露纯属疏忽,已采取补救措施
  • 国际能源署:全球电动汽车市场强劲增长,中国市场继续领跑
  • 中国巴西民间推动建立经第三方验证的“森林友好型”牛肉供应链
  • 尊严的代价:新加坡福利体系下的价值困境