LeetCode 11.盛最多水的容器
思路🧐:
可以用对撞指针的方式,左右两边分别定义一个变量,都往中间走,相遇停止,中间不断更新最大容积,而选出来的最大值就是最大容积。
这里容积的计算方式为,左右两个边选出更短的边乘底边(下标相减)。我们用对撞指针判断哪个边更短哪边移动,原理是当指针向中间走时,底边一定是越来越短的,而更短的那个边容积一定更小,所以需要淘汰,每次都更新最大容积,直到左右指针相遇,所选出来的容积就是最大值。
代码🔎:
class Solution { public: int maxArea(vector<int>& height) { int left = 0; int right = height.size() - 1; int MaxV = 0; while(left < right) { int v = min(height[left], height[right]) * (right - left); //计算容积 MaxV = max(v,MaxV); //判断是否需要更新 if(height[left] > height[right]) //哪边小哪边动 right--; else left++; } return MaxV; } };