刷题-Leetcode-42. 接雨水

42. 接雨水

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/trapping-rain-water/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

在这里插入图片描述

题目分析

参考链接:
https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0042.接雨水.md

  1. 双指针法
    时间复杂度o(n2),空间复杂度o(1)
    按列求接水量,for循环的i代表第i颗柱子接水的量。求出每一列接水量,再相加。
    rHeight 求右侧height最大的
    lHeight求左侧height最大的
    找左右柱子最高的时候要跟rHeight或者lHeight比较,它们的值是动态变化的。
    力扣上超出时间限制
class Solution {
    
    
public:
    int trap(vector<int>& height) {
    
    
        int n = height.size();
        int sum = 0;
        for(int i = 0; i < n; i++){
    
    
            if(i == 0 || i == n - 1) continue;
            int lHeight = height[i];
            int rHeight = height[i];//记录右侧最高值
            // 找左侧柱子最高
            for(int l = i - 1; l >= 0; l--){
    
    
                if(height[l] > lHeight) lHeight = height[l];
            }
            // 找右侧柱子最高
            for(int r = i + 1; r < n; r++){
    
    
                if(height[r] > rHeight) rHeight = height[r];
            }
            int h = min(lHeight, rHeight) - height[i];
            sum += h;
       }
        return sum;
    }
};
  1. 动态规划
    先分别计算出左边最高的柱子以及右边最高的柱子
    注意:求每根柱子右边最大高度,i–!!!!
class Solution {
    
    
public:
    int trap(vector<int>& height) {
    
    
        int n = height.size();
        if(n < 2) return 0;
        int sum = 0;
        vector<int> maxLeft(n, 0);
        vector<int> maxRight(n, 0);
        maxLeft[0] = height[0];
        for(int i = 0; i < n; i++){
    
     // 记录每根柱子左边最大高度
            if(i == 0) continue;
            maxLeft[i] = max(height[i], maxLeft[i - 1]);   
        }
        maxRight[n - 1] = height[n - 1];
        for(int i = n - 1; i >= 0; i--){
    
     // 记录每根柱子右边最大高度
            if(i == n - 1) continue;
            maxRight[i] = max(height[i], maxRight[i + 1]);
        }
        for(int i = 0; i < n; i++){
    
    
            int h = min(maxLeft[i],maxRight[i]) - height[i];
            sum += h;
        }
        return sum;
    }
};
  1. 单调栈
    暂无

Guess you like

Origin blog.csdn.net/qq_42771487/article/details/120302123