package a5;
/*
* 从两边同时往目标靠近(目标即我们假定的最低值)
* */
class Solution {
public static void main(String[] args) {
int[] height = {1,8,6,2,5,4,8,3,7};
System.out.println(new Solution().maxArea(height));
}
public int maxArea(int[] height) {
int maxAns = 0;//最多能接的水
for (int i = 0; i < height.length; i++) {//我们假定的最小的值(容器两边高度的最小值)
//左右指针
int leftIndex = 0, rightIndex = height.length - 1;
int lv = 0, rv = 0;//lv:左指针与i下标围成的体积 rv:右指针与i下标围成的体积
while (leftIndex < i) {
if(height[leftIndex] >= height[i]) {
lv = height[i] * (i - leftIndex);
break;
}
leftIndex++;
}
while (rightIndex > i) {
if(height[rightIndex] >= height[i]) {
rv = height[i] * (rightIndex - i);
break;
}
rightIndex--;
}
if(Math.max(lv, rv) > maxAns) {
maxAns = Math.max(lv, rv);
}
}
return maxAns;
}
}
11. 盛最多水的容器
最新推荐文章于 2024-10-13 15:10:00 发布