leetcode11 盛最多水的容器

这个题的解题思路为,使用左右两根指针往中间移动去计算面积,在移动过程中,宽度是逐渐减小的,只有高度高于之前点的高度,才有可能产生更大的面积。

先贴出自己的解法,时间复杂度为O(N),空间复杂度为O(1)

class Solution {

    public int maxArea(int[] height) {

        int maxNum = 0;

        int start = 0;

        int end = height.length - 1;

        while (start < end) {

            if (height[start] >= height[end]) {

                int h = height[end];

                int area = (end - start) * h;

                if (area > maxNum) {

                    maxNum = area;

                }

                while (h >= height[end] && start < end) {

                    end--;

                }                       

            } else {

                int h = height[start];

                int area = (end - start) * h;

                if (area > maxNum) {

                    maxNum = area;

                }

                while (h >= height[start] && start < end) {

                    start++;

                }         

            }

        }

        return maxNum;        

    }

}

再贴官方解法,官方解法更简洁,但是每移一步,都比较了一次是否是最大值,比较浪费,应该先比较高有没有变高,没变高就一直移动。

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;        

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 堡子有三大族,刘、李、赵。刘三爷是刘家的主事人,甚至也是城里的拿事人。刘家老大死的早,没有留下后人,老二儿女一堆,...
    西北小狼186阅读 692评论 12 21
  • 本来是几天的工作量,因为单据传递环节的问题,集中堆在一起了。 办公桌上铺满了单据,和我同桌的同事亦然,互相都有去占...
    向日葵_春藤阅读 480评论 10 11
  • 2018.02.16晴 今天是大年初一,婆家习俗是早起磕头拜年。时间订在凌晨4点,因为孩子小起不来我没有参与其...
    子轩baobao阅读 144评论 0 0