zoukankan      html  css  js  c++  java
  • leetcode 42.接雨水

    给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

    上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

    示例:

    输入: [0,1,0,2,1,0,1,3,2,1,2,1]
    输出: 6

    思路:
      1:找到和当前能和当前位置形成最大凹槽的位置
       有两种情况
          1. 能找到比当前位置高的位置
    2. 找不到比当前高的位置
    2. 计算每个凹槽的容量
     1 int trap(vector<int>& height) {
     2         int ans = 0, len = height.size();
     3 
     4         for(int i = 0; i < len-1; i++) {
     5             int j = i+1, max = j, sum = 0;
     6             //起始位置为0,以及起始位置相邻位置更高都直接进行下一个, 这些情况下,无法接雨水
     7             if(height[i] == 0 && height[j] >= height[i]) continue; 
     8             //找到比当前位置更高或相同高度的位置
     9             while(j < len && height[j] < height[i]) {
    10                 //存在这样的情况,当前位置后面不存在比当前位置高的位置
    11                 //那么只能退而求其次,找到当前位置后面最高的位置,这样
    12                 //才能满足接的雨水最多
    13                 if(height[max] <= height[j]) max = j;
    14                 //把当前位置和目标位置之间的方块数加起来
    15                 //当前位置和目标位置之间的面积减去之间的方块数
    16                 //就是能接的雨水数目
    17                 sum += height[j];
    18                 j++;
    19             }
    20             //能找到不比当前位置低的位置
    21             if(j < len) {
    22                 ans += height[i]*(j-i-1) - sum;
    23                 i = j-1;
    24             } else if(max != i+1){//找不到比当前位置高的位置
    25                 int sum1 = 0;
    26                 for(int m = i+1; m <= max; m++)  sum1 += height[m];
    27                 ans += (height[max]*(max-i)-sum1);
    28                 i = max-1;
    29             }
    30         }
    31         return ans;
    32     }
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    web前端
    touch.js——手机端的操作手势
    js实现touch移动触屏滑动事件
    Javascript闭包(Closure)
    javascript的垃圾回收机制与内存管理
    浏览器渲染页面
    Web前端面试题目汇总
    gulp VS grunt
    [编写高质量代码:改善java程序的151个建议]建议88 用枚举实现工厂方法模式更简单
    [编写高质量代码:改善java程序的151个建议]建议86,87 default值,valueOf
  • 原文地址:https://www.cnblogs.com/mr-stn/p/8870754.html
Copyright © 2011-2022 走看看