错题备忘录
双指针解题思路证明
假设:存在l, r,使得[l, r]之间的部分构成最优解,双指针i, j分别从最左和最优向中间逼近至最优解的位置,则有一侧优先到达指定位置
可证明:若i / j其中之一优先到达指定位置(这里假设i先到达l),那么[r, j)的所有竖线长度均小于等于l处竖线长度(反证法可证明)
得出结论:双指针向置定位逼近时遵循,那侧小那侧移动的原则。
代码
class Solution {
public:
int maxArea(vector<int>& h) {
int i = 0, j = h.size() - 1, res = 0;
while (i < j) {
res = max(res, (j - i) * min(h[i], h[j]));
if (h[i] < h[j]) i ++ ;
else j -- ;
}
return res;
}
};