欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode修炼之路----------11.盛最多水的容器

程序员文章站 2024-03-09 16:08:43
...

11.盛最多水的容器

题目如下:
LeetCode修炼之路----------11.盛最多水的容器
解题代码与解析

 public int maxArea(int[] height) {

        //指向最左边和最右边的两个变量
        int left = 0, right = height.length - 1;

        //假设最左和最右的两条线组成的面积最大
        int maxarea = (height.length - 1) * Math.min(height[left], height[right]);

        //最多height.length-1次,两指针相遇
        // 因为我们要试所有的线所组成的面积,所有要for循环;在换线的过程中始终记录最大的那两条线组成的面积
        for (int i = 0; i < height.length - 1; i++) {

            //判断指针相遇
            if (left < right) {
                /*
                *     由于最短的那一条线决定了高度,所以换两条线中最短的那条出来,换成更高的
                * */
                if (height[left] > height[right]) {
                    // 这里代表左边的线更高,所有要换右边的线
                    right--;
                    // 虽然要换线,但是换完线的面积不一定比没换的大,所以要进行比较是以前大还是换完大,maxarea记录最大的
                    maxarea = Math.max(maxarea, Math.min(height[left], height[right]) * (right - left));
                } else {
                    // 这里代表右边的更高,所有要换左边的线
                    left++;
                    // 这里也是一样要比较换完的面积和之前的面积
                    maxarea = Math.max(maxarea, Math.min(height[left], height[right]) * (right - left));
                }
            } else{
                break;
            }

        }
        return maxarea;
    }

解题思路:

  1. 由于是由两条线组成的面积,所以可以假设由最左和最右的两条线组成的面积最大
  2. 组成面积的时候是由两条线中短的那条决定高度的,所以更换短的那一条线,换成比它高的再比较面积是否有增加
  3. 遍历数组找到组成面积最大的两条线

结果如下:
LeetCode修炼之路----------11.盛最多水的容器

谢谢阅读,如有不对之处请指出!

相关标签: LeetCode修炼之路