本文共 1108 字,大约阅读时间需要 3 分钟。
力扣原题:
class Solution { public int maxArea(int[] height) { if (null == height || 0 == height.length) { return 0; } int max = 0; for (int i = 0; i < height.length; i++) { for (int j = i + 1; j < height.length; j++) { int sum = (j - i) * Math.min(height[i], height[j]); max = Math.max(max, sum); } } return max; }}
class Solution { public int maxArea(int[] height) { if (null == height || 0 == height.length) { return 0; } // 双指针 int i = 0; int j = height.length - 1; // 记录最大值 int max = 0; while (i < j) { int left = height[i]; int right = height[j]; int sum = (j - i) * Math.min(left, right); // 判断短板边界,移动指针 if (left <= right) { i++; } else { j--; } max = Math.max(max, sum); } return max; }}
根据题意,容易想到可以通过左右指针进行边界移动,动态计算盛水量即可。
转载地址:http://nnaii.baihongyu.com/