网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
提示:
解法1 按列计算
/\*\*
\* @param {number[]} height
\* @return {number}
\*/
var trap = function(height) {
let area=0;
let leftMax=0;
let rightMax=0;
for(let i=0;i<height.length;i++){
rightMax=findRightMax(leftMax,i,height);
if(height[i]<leftMax&&rightMax>height[i]){
area+=Math.min(leftMax,rightMax)-height[i];
}
else if(!findRightMax(leftMax,i,height)){
leftMax=height[i];
}
if(height[i]>leftMax) leftMax=height[i];
}
return area;
};
function findRightMax(num,j,height){
let n=0;
for(let i=j;i<height.length;i++){
if(height[i]>=num){
return height[i];
}
if(height[i]>n)n=height[i]
}
return n;
}
执行结果:
解法2:双指针解法【注意理解】
/\*\*
\* @param {number[]} height
\* @return {number}
\*/
var trap = function(height) {
let area=0;
if(height.length<=1) return 0;
let left=0;
let leftMax=0;
let right=height.length-1;
let rightMax=0;
while(left<right){
leftMax=Math.max(leftMax,height[left]);
rightMax=Math.max(rightMax,height[right]);
if(height[left]<height[right]){
area+=leftMax-height[left];
left++;
}else{
area+=rightMax-height[right];
right--;
}
}
return area;
};
执行情况:
解法3:单调栈【参照力扣官方】
/\*\*
\* @param {number[]} height
\* @return {number}
\*/
var trap = function(height) {
let area=0;
if(height.length<=1) return 0;


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.youkuaiyun.com/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
18658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**