【算法二十二】 739. 每日温度 42.接雨水

739. 每日温度

单调栈:

java 复制代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int n = temperatures.length;
        Deque<Integer> stack = new ArrayDeque<>();
        int[] ans = new int[n];
        for(int i = 0;i<n;i++){
            while(!stack.isEmpty() && temperatures[i]>temperatures[stack.peek()]){
                int j = stack.pop();
                
            }
        }
    }
}

时间复杂度:O(N)

空间复杂度:O(N)

核心:

遇到"找右边第一个比我大的数"、"找左边第一个比我小的数"

处理"凹"或"凸"的形状: 比如接雨水(找凹槽)或者最大矩形面积(找左右边界)

计算"跨度"或"贡献": 某个数在什么范围内是最大的?(比如:子数组最小值之和)

42. 接雨水

双指针:

java 复制代码
class Solution {
    public int trap(int[] height) {
        int ans = 0;
        int left = 0;
        int right = height.length - 1;
        int preMax = 0;
        int behMax = 0;
        while(left < right){
            //计算高度包含本高度的原因是,不需要写 if-else 去判断当前柱子是否比最大高度矮
            //矮的可以存水,高的不能存水
            //代码通过一次减法自动兼容了存水还是不能存水的逻辑
            preMax = Math.max(preMax,height[left]);
            behMax = Math.max(behMax,height[right]);
            if(preMax < behMax){
                ans += preMax - height[left];
                left++;
            }
            else{
                ans += behMax - height[right];
                right--;
            }
        }
        return ans;
    }
}

时间复杂度:O(N)

空间复杂度:O(1)

核心:Math.min(preMax,behMax) - heighti

单调栈:

java 复制代码
class Solution {
    public int trap(int[] height) {
        int ans = 0;
        Deque<Integer> stack = new ArrayDeque<>();
        for(int i = 0;i<height.length;i++){
            while(!stack.isEmpty() && height[stack.peek()]<height[i]){
                int bottom = height[stack.pop()];
                if(stack.isEmpty()){
                    break;
                }
                int left = stack.peek();
                int h = Math.min(height[left],height[i])-bottom;
                ans += h*(i-left-1);
            }
            stack.push(i);
        }
        return ans;
    }
}

时间复杂度:O(N)

空间复杂度:O(N)

相关推荐
政企项目老覃12 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm
GreenTea14 小时前
发布 3 天登顶 HN:不生成一个字的模型 Jev,我把它的源码和黑料都扒了一遍
前端·后端·算法
庖丁解牛14 小时前
无穷小不是一个“神秘小数”,而是一场奔向 0 的过程
算法
ZPC821015 小时前
YOLO26 识别串番茄果梗
人工智能·深度学习·算法·机器学习
景熙552315 小时前
14.Java 集合框架从入门到源码万字详解(含 ArrayList/LinkedList/HashMap 源码、泛型通配符、红黑树)
java·开发语言·数据结构·算法
aaaameliaaa15 小时前
结构体 结构体
c语言·笔记·算法
有Li16 小时前
【AI答疑】MR数据预处理步骤
人工智能·笔记·算法·语言模型·医学生
盛世宏博北京17 小时前
多传感器数据融合算法:实现档案库房温湿度全域无死角监测
算法·档案温湿度
AgentMaster17 小时前
零售行业智能客服系统怎么选?3 大场景落地与 4 款平台对比实践
大数据·人工智能·算法
远航计算机18 小时前
客服记录怎么变成 AI 会引用的内容?五步清洗法
大数据·人工智能·算法·aigc