leetcode(42) - Trapping Rain Water


给定n个非负整数,代表一个柱状图,每一个柱子的宽度为1,计算下雨之后柱状图能装多少水?

例如:

[0,1,0,2,1,0,1,3,2,1,2,1]  返回 6

    

上述柱状图是由数组表示[0,1,0,2,1,0,1,3,2,1,2,1]。在这种情况下,6个单位的雨水(蓝色部分)被


对于每个柱子,找到其左右两边最高的柱子,该柱子能容纳的面积就是 min(leftMostHeight,rightMostHeight) - height。所以,

1. 从左往右扫描一遍,对于每个柱子,求取左边最大值;

2. 从右往左扫描一遍,对于每个柱子,求最大右值;

3. 再扫描一遍,把每个柱子的面积并累加。


int trap(int* height, int heightSize) {
    
    if(heightSize <= 2) return 0;
    
    int i = 0;
    int* left_max=malloc(sizeof(int) * heightSize);
    memset(left_max, 0, heightSize);
    int* right_max=malloc(sizeof(int) * heightSize);
    memset(right_max, 0, heightSize);
    
    int left_tmp_max=0, right_tmp_max=0, ret=0;
    
    while(i < heightSize){    // 针对每个元素i,寻找它左边最大的,保存在left_max[i]
        left_max[i] = left_tmp_max;
        if(left_tmp_max < height[i])
            left_tmp_max=height[i];
        i++;
    }

    i=heightSize-1;
    while(i >= 0){             // 针对每个元素i, 寻找它右边最大的,保存在right_max[i]
        right_max[i] = right_tmp_max;
        if(right_tmp_max < height[i])
            right_tmp_max=height[i];
        i--;
      
       
    }
    
    i=0;
    while(i<heightSize){        //处理每个元素i,将min(left_max[i], right_max[i])-height[i] 加到ret中,即每个元素上面可以存储的水
        if(left_max[i] > right_max[i]) {
            ret+= ((right_max[i]-height[i])>0 ? (right_max[i]-height[i]) : 0);
        } else {
            ret+= ((left_max[i]-height[i])>0 ? (left_max[i]-height[i]) : 0);
        }
        i++;
         
    }
    
    return ret;
    
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值