装最多水的容器

给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。

解题

不理解题意

通俗的说

在上面n个点中找到两个点,使得线段一:(i,ai)  (i,0), 线段二:(j,aj)  (j,0) 线段三:(i, 0) (j, 0) 这三个线段能够组成的容器 可以盛放最多的水

二分法,找到一个区间求出最大面积

 1 public class Solution {
 2     /**
 3      * @param heights: an array of integers
 4      * @return: an integer
 5      */
 6     public int maxArea(int[] A) {
 7         // write your code here
 8         if(A == null || A.length <2)
 9             return 0;
10         int Max = 0;
11         int left = 0;
12         int right = A.length -1;
13         int subMax = 0;
14         while(left < right){
15             if(A[left] < A[right]){
16                 subMax = (right - left)*A[left];
17                 left++;
18             }else{
19                 subMax = (right - left)*A[right];
20                 right--;
21             }
22             Max = Math.max(subMax,Max);
23         }
24         
25         return Max;
26     }
27 }
Java Code

相关文章:

  • 2021-08-21
  • 2021-08-27
  • 2022-01-10
猜你喜欢
  • 2022-03-09
  • 2021-06-16
  • 2021-10-11
  • 2021-11-25
相关资源
相似解决方案