原题链接:https://leetcode.com/problems/container-with-most-water/description/
意思是在坐标系x轴每个整数点画垂直于x轴的线,高度由输入给定,然后计算任意两条线与x轴围成的面积(木桶效应,高度为两条中较低的那条)。
我的实现(Two Pointer Approach):
class Solution { public: int maxArea(vector<int>& height) { int start = 0; int end = height.size() - 1; int max = 0; while (start < end) { int area = (height[start] < height[end] ? height[start] : height[end]) * (end - start); if (area > max) max = area; if (height[start] < height[end]) start++; else end--; } return max; } };
操作步骤及原理:先从两个指针指向开始点和结束点,并计算容器面积,然后把高度较低的指针向高度较高指针方向移(因为容器面积由较低位决定,较高位高度无关紧要,如果之后面积可以得到宽度减小的补偿,那也是较低的高度改变了,所以移动较低的那个指针),再计算面积。一直这样下去直到两个指针先后顺序改变从而得到最大容器面积。
总结:重点是移动哪个指针,为什么这样做可以?如果不清楚再看看解析https://leetcode.com/problems/container-with-most-water/solution/