您的位置:首页 > 大数据 > 人工智能

Container With Most Water

2014-01-04 23:23 211 查看
题目也很有意思。当然最先想到的就是暴力搜索啦,不过猪都知道暴力搜索肯定过不了测试数据的,那么怎么办呢?

设置两个指针,i和j,起初指向两头,算一下能围成的最大面积,然后,如果height[i]小,i后移;height[j]小,j前移;相等的话,两个都向中间移。最后i和j相遇时记录到的最大值就是答案了。

为什么可以如此做呢?简单的说就是木桶原理……在我们计算完围成的面积准备移动指针的时候,到底该怎么移可以由木桶原理决定。假设height[i]小,那么显然,算面积的时候height[i]成了一个短板,这下好了,无论j怎么移动(当然是向前移),计算出的面积只会小不会再大了。换言之,当其中有一个板在位置i时,我们已经找到了可能的最大值,因此i就可以放心大胆地右移了。其余情况类似。当i和j相遇时,就找到了我们要的答案。

class Solution {
public:
int maxArea(vector<int> &height) {
int i = 0, j = height.size() - 1;
int res = 0;
while (i < j) {
if (min(height[i], height[j]) * (j - i) > res)
res = min(height[i], height[j]) * (j - i);
if (height[i] < height[j])
i++;
else if (height[i] > height[j])
j--;
else {
i++;
j--;
}
}
return res;
}
};
http://oj.leetcode.com/problems/container-with-most-water/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: