接雨水 发表于 2016-10-25 | 分类于 Java | | | 接雨水问题描述:如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返回 6。12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455public class Solution { /** * @param heights: an array of integers * @return: a integer */ public int trapRainWater(int[] heights) { int sum=0; int index=0; int k=0; int mintemp=0; for(int i=0;i<heights.length-1;){ if(heights[i]<=heights[i+1]){ i++; continue; } else{ index=find(heights,heights[i],i+1); if(index==0){ break; } k=i+1; mintemp=Math.min(heights[i],heights[index]); while(k<index){ sum+=mintemp-heights[k]; k++; } i=index; } } return sum; } public int find(int[] heights,int temp,int i){ int max=0; int index=0; int k=i; int count=0; for(;i<heights.length;i++){ if(i+1<heights.length&&heights[i]>=heights[i+1]){ count++; } if(heights[i]>max){ max=heights[i]; index=i; } if(heights[i]>=temp){ return i; } } if(count==heights.length-k){ return 0; } return index; }} 运行时间:1635ms