【C++】双指针算法:盛最多水的容器

 1.题目

2.算法思路

有两种方法:

第一种:

暴力穷举法,就是用两次循环将所有的可能性算出来,然后求出最大值。

这种方法最容易想到,但时间复杂度是O(n^2),一定会超时的!

第二种:

仔细观察题目特点,任意两条线之间的体积=短的那条线*两条线之间的距离。

例如数组{2,3,8,1,7,6}。2和6之间的距离=2*5。根据体积的计算特点,对于2来说,它和其他数字之间的体积一定小于2和6之间的体积,所以这些情况就可以直接舍掉,最大体积一定在{3,8,1,7,6}中产生。同样的道理,3和6之间的体积为3*4。对于3来说,它和其他数之间的体积一定小于3和6之间的体积,然后这些情况可以舍掉,只用考虑{8,1,7,6}。这样循环往复,最后的最大值一定在计算出来的体积中产生。

3.提交结果和代码实现

代码:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int right=height.size()-1,left=0,max_sum=0;
        while(right!=left){
            int sum=min(height[left],height[right])*(right-left);
            max_sum=max(max_sum,sum);
            if(height[right]>height[left]) left++;
            else right--;
        }
        return max_sum;
    }
};

时间复杂度分析:

只遍历了一次数组,所以时间复杂度:O(n)。

空间复杂度分析:

定义了四个变量,所以空间复杂度:O(1)。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-27 01:06:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-27 01:06:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-27 01:06:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-27 01:06:02       20 阅读

热门阅读

  1. 想要活得充实,必须做到以下7点。

    2024-04-27 01:06:02       12 阅读
  2. leetcode2739--总行驶距离

    2024-04-27 01:06:02       12 阅读
  3. [leetcode] 1071. 字符串的最大公因子

    2024-04-27 01:06:02       16 阅读
  4. MySQL 联合索引的原理及失效原理

    2024-04-27 01:06:02       17 阅读
  5. bgzip解压.gz文件并保留原文件

    2024-04-27 01:06:02       13 阅读
  6. 嵌入式软件工程师要会画板子吗?

    2024-04-27 01:06:02       14 阅读
  7. 《设计模式之美》第四章 总结

    2024-04-27 01:06:02       12 阅读
  8. python常见的语法详解

    2024-04-27 01:06:02       14 阅读
  9. 泰国SAP项目须知- 泰国企业经营税务要点和BOI

    2024-04-27 01:06:02       18 阅读
  10. 算法训练营day24

    2024-04-27 01:06:02       13 阅读
  11. GD32F4xx 通用定时器输出PWM

    2024-04-27 01:06:02       12 阅读