婚纱类网站素材,长沙flash网站设计,wordpress伪静态 404,北京网站开发公司哪家好例题#xff1a; 分析#xff1a;
这道题给出了一个数组#xff0c;数组里的元素可以看成每一个挡板#xff0c;要找到哪两个挡板之间盛的水最多#xff0c;返回盛水量的最大值。这其实是一个双指针问题。
我们可以先固定第一个挡板( i )和最后一个挡板( j )#xff0c…例题 分析
这道题给出了一个数组数组里的元素可以看成每一个挡板要找到哪两个挡板之间盛的水最多返回盛水量的最大值。这其实是一个双指针问题。
我们可以先固定第一个挡板( i )和最后一个挡板( j ) height[0] 1, height[8] 7看看盛水量。 现在盛水量比较少要让盛水量尽可能多假设我们先移动 j 指针 我们发现固定了两个挡板当移动高的挡板时盛水量随着 j 指针的左移在不断减少必然小于最初的盛水量因此我们不能移动高挡板。
如果移动较低的挡板如下图 移动较低的挡板盛水量是有可能增多的。 核心思想向中间不断缩减距离每次改变较短的挡板。 代码实现
public class MostWaterLeetcode11 {public static int maxArea(int[] height) {int i 0, j height.length - 1;int max 0; //最大盛水量while(i j){int min Integer.min(height[i], height[j]);max Math.max(max, (j - i) * min);while(i j height[i] min){i;}while(i j height[j] min){j--;}}return max;}public static void main(String[] args) {System.out.println(maxArea(new int[]{1, 8, 6, 2, 5, 4, 8, 3, 7})); // 49System.out.println(maxArea(new int[]{2,1})); // 1}
}