题解 | #盛水最多的容器#

盛水最多的容器

http://www.nowcoder.com/practice/3d8d6a8e516e4633a2244d2934e5aa47

解题思路

  1. 采用双指针,left指向最左端,right指向最右端,left、right初始时都位0;
  2. 设变量vol位最大体积,vol初始时也为0;
  3. 循环计算vol的值:
  • 若height[left] <= height[right], 则令当前高度h = height[left], 体积为当前的vol和h*(right-left)之前的最大值,其中right-left为当前宽度;然后left递增;
  • 否则令当前高度h = height[right], 体积为当前的vol和h*(right-left)之前的最大值,其中right-left为当前宽度;然后right递减;
  • 循环结束条件:left >= right;
  1. 复杂度分析:
  • 时间复杂度: O(n), n为数组长度;
  • 空间复杂度:O(1)。
class Solution {
public:
    int maxArea(vector<int>& height) 
    {
        int sz = height.size();
        if(sz < 2)
            return 0;
        int vol = 0;
        
        int left = 0, right = sz-1;
        while(left < right) {
            int h = 0;
            if(height[left] <= height[right]) {
                h =  height[left];
                vol  = max(vol, h*(right-left));
                ++left;
            } else {
                h =  height[right];
                vol  = max(vol, h*(right-left));
                --right;
            }
        }
        
        return vol;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务