给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水
通用公式:currentWater = min(maxL,maxR) - CH(当前这一项)
const elevationArray = [0,1, 0,2, 1,0,3,1,0,1,2]
const getTrappedRainwater = function(heights){
let totalWater = 0;
for(let p = 0;p<heights.length;p++){
let leftP = p,rightP = p,maxLeft = 0,maxRgith =0;
while(leftP>=0){
maxLeft = Math.max(heights[leftP],maxLeft)
leftP--
}
while(rightP<heights.length){
maxRgith = Math.max(heights[rightP],maxRight)
rightP++
}
const currentWater = Math.min(maxLeft,maxRgith) - heights[p]
if(currentWater >= 0){
totalWater += currentWater
}
}
}
时间复杂度:O(n^2)
空间复杂度:O(1)
const getTrappedRainwater = function(heights){
let left = 0,
right = heights.length -1,
totalWater = 0,
maxLeft = 0,
maxRgith = 0;
while(left<right){
if(heights[left]<=heights[right]){
if(heights[left] >= maxLeft){
maxLeft = heights[left]
}else{
totalWater += maxLeft - heights[left]
}
left++
}else{
if(heights[right] >= maxRight){
maxRight = heights[right]
}else{
totalWater += maxRgith - heights[right]
}
right--
}
}
}
时间复杂度 O(n)
空间复杂度 O(1)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。