• (LeetCode C++)盛最多水的容器


    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

    找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

    返回容器可以储存的最大水量。

    说明:你不能倾斜容器。

    示例 1:

    1. 输入:[1,8,6,2,5,4,8,3,7]
    2. 输出:49
    3. 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49

     

    示例 2:

    1. 输入:height = [1,1]
    2. 输出:1

    提示:

    1. n == height.length
    2. 2 <= n <= 105
    3. 0 <= height[i] <= 104

    Method:双指针-盛最多水的容器

    Idea:

    双指针分别指向容器的左右边界,计算此时的容器容积,并与当前最大容积比较。

    如果左边界低于右边界,说明此时左边界是短板,因此将左边界向右移动1。

    如果右边界低于左边界,说明此时右边界是短板,因此将右边界向左移动1。

    就这样,每次移动一边的边界让两个边界靠拢,直到两个边界重合时结束。

    Code:

    1. class Solution{
    2. public:
    3. // 双指针-盛最多水的容器
    4. int maxArea(vector<int> &height){
    5. // 容器的最大容积
    6. int max_capacity=0;
    7. // 容器的左边界
    8. int left=0;
    9. // 容器的右边界
    10. int right=height.size()-1;
    11. // 如果左右边界没有靠拢,则保持循环
    12. while(left
    13. // 记录左右两边中的最短边
    14. int width=0;
    15. if(height[left]
    16. width=height[left];
    17. }
    18. else{
    19. width=height[right];
    20. }
    21. // 比较容器的容积与当前最大容积
    22. if(max_capacity
    23. // 如果容积变大,则更新当前最大容积的值
    24. max_capacity=width*(right-left);
    25. }
    26. // 如果左边是短板,则左边右移
    27. if(height[left]
    28. left++;
    29. }
    30. // 如果右边是短板,则右边左移
    31. else{
    32. right--;
    33. }
    34. }
    35. // 返回容器的最大容积
    36. return max_capacity;
    37. }
    38. };

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/container-with-most-water
     

  • 相关阅读:
    历史上的今天查询易语言代码
    将PyCharm中的终端运行前面的PS修改成当前环境
    centos7.6安装python3.8
    JavaScript快速入门
    软件性能测试包括哪些内容?国内权威软件检测机构排名
    剑指offer68-77二分查找、排序
    ctf之流量分析学习
    jQuery_链式编程/end方法
    Informatica旗下PowerCenter的元数据库解析
    JZ40 最小的K个数
  • 原文地址:https://blog.csdn.net/qq_40728667/article/details/126593817