# LeetCode题解-盛水最多的容器-Java

package leetCode;
//官方解法
class Solution {

public int maxArea(int[] height) {

int maxarea = 0, l = 0, r = height.length - 1;
while (l < r) {

maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));
if (height[l] < height[r])
l++;
else
r--;
}
return maxarea;
}
}

//我的思路：每次比较单侧，利用偏移量来比较，和官方解法对比后，感觉我的思路就是暴力法
public class BestWaterContainer {

public static void main(String[] args) {

//int[] heights= {10,9,8,7,6,5,4,3,2,1};//25
//int[] heights= {1,8,6,2,5,4,8,3,7};//49
//int[] heights= {1,1};
//int[] heights= {1,2,1};
int[] heights= {
2,3,10,5,7,8,9};//36
System.out.println(maxArea(heights));
}

public static int maxArea(int[] heights) {

//初始化最大值
int max = getAcreage(0, heights.length-1, heights);
System.out.println("初始化的Max："+ max);
int i = 0;
int j = heights.length - 1;
int offsetLeft = 1;
int offsetRight = 1;
while ((i+offsetLeft)<=(j+offsetRight)&&(i+offsetLeft)<heights.length||(j-offsetRight)>= 0) {

// 首先是0和lenght-1，然后让其分别与单侧相邻点比较，取大者，计算值，若值更大者留下
if ((i+offsetLeft)<heights.length&&heights[i]< heights[i + offsetLeft]) {

int area = getAcreage(i + offsetLeft, j, heights);
if (area > max) {

max = area;
i = i + offsetLeft;
}
//System.out.println("循环中的max:i :"+max);
}
if ((j-offsetRight)>= 0&&heights[j] < heights[j - offsetRight]) {

int area = getAcreage(i, j-offsetRight, heights);
if (area > max) {

max = area;
j = j - offsetRight;
}
//System.out.println("循环中的max:j :"+max);
}
offsetLeft++;
offsetRight++;
}
return max;

}

public static int getAcreage(int startPoint, int endPoint, int heights[]) {

int height = Math.min(heights[startPoint], heights[endPoint]);
int wide = endPoint - startPoint;
return wide * height;
}

}


|
1月前
|

LeetCode刷题---11. 盛最多水的容器（双指针-对撞指针）
LeetCode刷题---11. 盛最多水的容器（双指针-对撞指针）
23 0
|
1月前
|

[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
23 1
|
3天前
|

C++和Java中的随机函数你玩明白了吗？内附LeetCode470.rand7()爆改rand10()巨详细题解，带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗？内附LeetCode470.rand7()爆改rand10()巨详细题解，带你打败LeetCode%99选手
11 0
|
1月前
|

[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
22 0
|
1月前
|

[Java·算法·中等] LeetCode15. 三数之和
[Java·算法·中等] LeetCode15. 三数之和
29 0
|
30天前
|
Java 容器
Java常用组件、容器与布局
Java常用组件、容器与布局
13 0
|
1月前
|

Java并发 - J.U.C并发容器类 list、set、queue
Queue API 阻塞是通过 condition 来实现的，可参考 Java 并发 - Lock 接口 ArrayBlockingQueue 阻塞 LinkedBlockingQueue 阻塞 ArrayQueue 非阻塞 LinkedQueue 非阻塞
22 0
|
1月前
|

[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
18 0
|
1月前
|

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
19 0
|
1月前
|

[Java·算法·简单] LeetCode 141. 环形链表 详细解读
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
23 0