import java.util.*; /** * NC168 盛水最多的容器 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param height int整型一维数组 * @return int整型 */ public int maxArea (int[] height) { return solution1(height); // return solution2(height); } /** * 双指针(对撞指针) + 贪心 * @param height * @return */ private int solution1(int[] height){ int n = height.length; if(n < 2){ return 0; } int result = 0; int water; int lower; // 双指针(对撞指针) int i=0,j=n-1; while(i < j){ lower = Math.min(height[i],height[j]); water = lower*(j-i); result = Math.max(result, water); // 贪心 if(height[i] <= height[j]){ while(i<j && height[i]<=lower){ i++; } }else{ while(i<j && height[j]<=lower){ j--; } } } return result; } /** * 双指针(对撞指针) + 贪心 * @param height * @return */ private int solution2(int[] height){ int n = height.length; if(n < 2){ return 0; } int result = 0; int water; int lower; // 双指针(对撞指针) int i=0,j=n-1; while(i < j){ lower = Math.min(height[i],height[j]); water = lower*(j-i); result = Math.max(result, water); // 贪心 if(height[i] <= height[j]){ i++; }else{ j--; } } return result; } }