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

    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 int trap(int* height, int heightSize){
     2     if(heightSize<2){
     3         return 0;
     4     }
     5     int i=0,j,cmp=0,HeightFlag,max=height[0];
     6     for(i=1;i<heightSize;i++){
     7         if(height[i]>max){
     8             max=height[i];
     9         }
    10     }
    11     for(i=0;i<heightSize;i++){
    12         if(height[i]==max){
    13             break;
    14         }
    15     }
    16     HeightFlag=i;
    17     for(i=0,j=i+1;j<HeightFlag;j++){
    18         if(height[i]>=height[j]){
    19             cmp+=(height[i]-height[j]);
    20         }else{
    21             i=j;
    22         }
    23     }
    24     i=heightSize-1;
    25     for(j=i-1;j>HeightFlag;j--){
    26         if(height[i]>height[j]){
    27             cmp+=(height[i]-height[j]);
    28         }else{
    29             i=j;
    30         }
    31     }
    32     return cmp;
    33 }
     
  • 相关阅读:
    excel处理经纬度
    Bootstrap:弹出框和提示框效果以及代码展示
    c# 多张图片合成一张图片
    webapi------宿主程序
    git安装完设置成中文
    邮件帮助类
    IISHelper操作iis
    删除数组中的重复项
    SQL 、LINQ日前比较
    PostAsync与GetAsync
  • 原文地址:https://www.cnblogs.com/woju/p/12634550.html
Copyright © 2011-2022 走看看