• 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 }
     
  • 相关阅读:
    redis安装及教程
    Spring Cloud Alibaba系列教程
    EasyCode代码生成工具使用介绍
    FastDFS服务器搭建
    轻量级的java HTTP Server——NanoHttpd
    java代码的初始化过程研究
    浅谈设计模式的学习(下)
    浅谈设计模式的学习(中)
    浅谈设计模式的学习(上)
    PGET,一个简单、易用的并行获取数据框架
  • 原文地址:https://www.cnblogs.com/woju/p/12634550.html
Copyright © 2020-2023  润新知