leetcode 11. 盛最多水的容器(优质解法)

leetcode 11. 盛最多水的容器(优质解法)_第1张图片

leetcode 11. 盛最多水的容器(优质解法)_第2张图片

代码:

class Solution {
    public int maxArea(int[] height) {
        int n=height.length;
        int left=0;
        int right=n-1;
        int max=0;

        while (leftmax){
                max=area;
            }
            //调整选取的线,尝试获得更大的面积
            if(height[left]

题解:

        1.首先题目需要我们获取到容器的最大面积,面积的计算就是 底 x 高 ,对于示例1,得到的最大面积是 7x7=49,根据图形进行分析,高度为 7 是因为容器的高度取决于短的那条边,所以高度是 min(8,7),底是两条边之间的距离,两条边的下标分别为 1,8 ,底为 8-1=7

        根据上面的分析,我们假设指针 left 指向下标 1 的边,right 指向下标 8 的边,面积 area=min( height [ left ] , height [ right ])x ( right - left )

        2. 我们使用示例 1 来进行分析

        首先假设我们有一个变量 max=0 ,用来保存此时分析出的最大面积

        我们的目的是要获得最大的面积,所以我们可以一开始让 left 指向下标 0 ,right 指向下标 height.length - 1,此时构成的图形底边是最长的,我们可以计算出当前的面积为1 x 8 = 8,当前的面积(8) > max(0) 就覆盖 max 的值

1        8        6        2        5        4        8        3        7

L                                                                              R

        接下来,我们想尽可能的获取更大的面积但此时无论是移动 left 还是 rght 都会导致底边变小,所以我们移动以后高度就得变大才行,所以我们要淘汰两条边中较小的那条边,left 指向的边是 1 ,right 指向的边是 7,所以我们选择让 left++ 向右移动,把 1 这条边淘汰

1        8        6        2        5        4        8        3        7

          L                                                                    R

        此时得到的面积为 7 x 7 =49 ,当前的面积(49) > max(8) 就覆盖 max 的值,然后我们继续淘汰两条边中较小的那条边,此时 right 指向的 7 较小,所以我们要让 right -- 向左移动

        一直循环上述的操作,直到 left 和 right 相遇,此时 max 中的值就是最大的面积

        

        

       

你可能感兴趣的:(leetcode,leetcode,算法,数据结构)