首页 > 学院 > 开发设计 > 正文

Leetcode 11 - Container With Most Water(two pointers)

2019-11-08 01:41:25
字体:
来源:转载
供稿:网友

github仓库:https://github.com/lzed/leetcode

题意

给定一堆竖着的线,找两条线,使这两条线围城的容器的面积最大。

思路

首先,我们先贪心的去考虑:假设我们直接取最两边的两条线i和j,能否获得最大高度?显然是不一定的。

然后,我们去需要取移动两边的选取i和j了。

然后基于如下事实:

ai<aj,并且若向左移动j到k的位置,那么此时的面积S′=min(ai,ak)(k−i)

ai>aj,那么我们向右移动i不会更新最优解。

所以,就可以得到我们的算法:

两个指针i和j分别指向首尾。若ai<aj:向右移动i,更新答案。否则,向左移动j,更新答案。

代码

class Solution {public: int maxArea(vector<int>& a) { int i = 0, j = a.size() - 1, ans = 0; while (i < j) { if (a[i] < a[j]) ans = max(ans, a[i] * (j - i++)); else ans = max(ans, a[j] * (j-- - i)); } return ans; }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表