• 盛水最多的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。

    本题的做法十分巧妙,从最两侧的开始寻找最大值,然后向中间靠拢,每次都更新最大值,直到相遇 其中如果两侧的值相等,则向中间靠拢,因为如果向中间靠拢,则可以利用左侧的值,而右侧的值已经用不 如果两侧的较低的那个,我们就可以进行选择不要,向中间靠拢
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
       class Solution {
    public int maxArea(int[] height) {
    int pre = 0;
    int back = height.length-1;
    int ans[] = new int[height.length];
    int i = 0;
    int min=0;
    while(true){
    min = height[pre]<height[back]?height[pre]:height[back];
    ans[i] = min*(back-pre);
    i++;
    if(height[pre]<height[back])
    pre++;
    else
    back--;
    if(i==height.length)
    break;
    }
    // 初始化最大值为数组的第一个元素
    int max = ans[0];

    // 遍历数组,找到最大值
    for (int k = 1; k < ans.length; k++) {
    if (ans[k] > max) {
    max = ans[k];
    }
    }
    return max;
    }
    }