leetcode 42. 接雨水

it2022-05-05  149

本题可以通过先从一个方向遍历,同时记录遇到的最高柱(即最大数),使用这个数减去遍历到的数得到应该接到的雨水。累加这些数。当遇到的最后一块柱不是最高柱时,用最高柱的位置与数组长度的距离乘最高柱的高度。然后再反向遍历直到最高柱,遍历过程与之前相同,同时每次要加上柱高,因为之前减去的数包含了柱高。

class Solution {     public int trap(int[] height) {         int lenght = height.length;         if(lenght<=1){             return 0;         }         int max = height[0];         int index = 0;         int res = 0;         for(int i=1;i<lenght;i++){             if(height[i]<max){                res = res + max - height[i];              }else if(height[i]>=max){                 max = height[i];                 index = i;             }             if(i==(lenght-1)&&index!=i){                 res = res - max*(i-index);                 int maxj = 0;                 for(int j=lenght-1;j>index;j--){                     if(height[j]<maxj){                         res = res + maxj;                     }else if(height[j]>=maxj){                         maxj = height[j];                         res = res + maxj;                     }                 }             }         }         return res;     } }

  ↵

 


最新回复(0)