豆包 LeetCode 11. 盛最多水的容器 C++实现

豆包    LeetCode 11. 盛最多水的容器 C++实现 LeetCode 11. 盛最多水的容器 C 实现核心思路双指针贪心左右指针从两端向中间收缩每次移动高度更小的指针时间复杂度 O(n)空间 O(1)。cpp#include vector#include algorithmusing namespace std;class Solution {public:int maxArea(vectorint height) {int left 0;int right height.size() - 1;int max_area 0;while (left right) {int h min(height[left], height[right]);int w right - left;max_area max(max_area, h * w);// 移动较矮的一侧才有可能得到更大面积if (height[left] height[right]) {left;} else {right--;}}return max_area;}};原理说明1. 容器面积由较短的柱子高度和两柱间距决定2. 若移动高的指针宽度减小、高度不会变大面积一定变小3. 只有移动矮的指针才有可能获得更高的高度从而得到更大面积4. 左右指针不断向中间靠拢遍历一次即可得到最大值。测试用例cpp#include iostreamint main() {Solution sol;vectorint h1 {1,8,6,2,5,4,8,3,7};cout sol.maxArea(h1) endl; // 49vectorint h2 {1,1};cout sol.maxArea(h2) endl; // 1return 0;}复杂度- 时间O(n)仅一次遍历- 空间O(1)常数额外空间