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

盛水最多的容器

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

方法:双指针

利用首尾双指针遍历数组,当左指针的高度小于右指针时,左指针向右移动一位;否则,右指针向左移动一位。因为每次向中间移动的时候底部的长度会缩短,所以我们必须要移动较短的一侧高度,这样才有可能得到较大的容积。

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
  public:
    int maxArea(vector<int>& height) {
        // 特殊情况处理
        if (height.size() < 2)
            return 0;

        int res = 0;
        int left = 0;
        int right = height.size() - 1;

        while (left < right) {
            res = max(res, min(height[left], height[right]) * (right - left));

            if (height[left] < height[right])
                left++;
            else
                right--;
        }

        return res;
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
想申请延毕了,找工作找到崩溃,越找就越想摆烂,还有25届的和我一样感受吗?
码农索隆:没事哒,好兄弟,慢慢来,调整心态,车到山前必有路,感到迷茫的时候,多抬头看看
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务