当前位置:   article > 正文

Leetcode 热题11.盛最多水的容器(c++,双指针详细解法及完整版代码)_leetcode盛水最多的容器c++

leetcode盛水最多的容器c++

题目:11. 盛最多水的容器

给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器。

示例 1:

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

示例 2:

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

示例 3:

输入:height = [4,3,2,1,4]
输出:16

示例 4:

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

提示:

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

思路推荐官方解答如下:

力扣

核心思想:

容器体积:左右两端指针指向的数字中较小值∗指针之间的距离,即:min(left,right) * len

 移动规则:保持一端的指针指不变,每次移动指向数值较小的指针一格

双指针解法1:

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. using namespace std;
  5. class Solution{
  6. public:
  7. int maxArea(vector<int>& height) {
  8. //l是左端,r端开始,ans临时存放area,area每次计算出的容积
  9. int l = 0, r = height.size() - 1 , ans = 0, area = 0;
  10. while (l < r){
  11. area = ( r - l ) * min (height[l], height[r]);
  12. //一格指针移动后,取这次计算的area和上次计算的容积哪个大
  13. ans = max(ans, area);
  14. if (height[l] < height[r]){
  15. l++;
  16. } else{
  17. r--;
  18. }
  19. }
  20. return ans;
  21. }
  22. };
  23. int main(){
  24. Solution solution;
  25. int res;
  26. vector<int > arr = {1,8,6,2,5,4,8,3,7};
  27. res = solution.maxArea(arr);
  28. cout << res << endl;
  29. return 0;
  30. }

双指针解法2:

看到leetcode一个大神的写法,很简洁优美

力扣

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. using namespace std;
  5. class Solution{
  6. public:
  7. int maxArea(vector<int>& height) {
  8. int l = 0, r = height.size() - 1 , ans = 0;
  9. while ( l < r){
  10. ans = height[l] < height[r] ?
  11. max(ans, (r - l ) * height[l++]):
  12. max(ans, (r - l ) * height[r--]);
  13. }
  14. return ans;
  15. }
  16. };
  17. int main(){
  18. Solution solution;
  19. int res;
  20. vector<int > arr = {1,8,6,2,5,4,8,3,7};
  21. res = solution.maxArea(arr);
  22. cout << res << endl;
  23. return 0;
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/146364
推荐阅读
相关标签
  

闽ICP备14008679号