标签:minH 盛水 int maxAr length height 问题 leecode11 指针
一开始用的暴力解法 两个for循环
因为有两个指针指向 然后第一下就是想着两个指针
然鹅指针一个在头一个在尾
开始记录了最左和最右的容量,若向内移动短指针 容器有可能变大(三种情况都有)
若移动长指针,那么容量会变小,因为两个壁最小值不变,而间距变小。
class Solution {
public int maxArea(int[] height) {
//Area=(ni-nj)*hmin
//有点类似排序的
if(height.length<1) return 0;
if(height.length==1) return Math.min(height[0],height[1]);
//超过三个 Area=(ni-nj)*hmin 寻找坐标下这个最大的
int maxAr=0;
//for(int start=0;start<height.length;start++){//遍历每个下标
// int end=start+1;
// while(end<height.length){
// tem=(Math.abs(start-end))*(Math.min(height[start],height[end]));//保存容量
// if(tem>=maxAr){
// maxAr=tem;//保存最大容量
// }
// ++end;
// }
//}
int i=0;
int j=0;
int minH=0;
for(i=0,j=height.length-1 ; i < j ;){
//寻找i j最小的一个
minH=(height[i]<height[j])?height[i++]:height[j--];//寻找高较小的一个
maxAr=Math.max(minH*(Math.abs(i-j)+1),maxAr);//+1的原因是位置已经移动 不是原来的位置
}
return maxAr;
}
}
标签:minH,盛水,int,maxAr,length,height,问题,leecode11,指针 来源: https://blog.csdn.net/wish9968/article/details/120849882
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。