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/
设置两个指针,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/
相关文章推荐
- leetcode_11_Container With Most Water
- Container With Most Water
- [LeetCode]-011-Container_With_Most_Water
- leetcode第一刷_Container With Most Water
- Leet Code 11 Container With Most Water
- Leetcode题解:11. Container With Most Water
- leetcode 第11题 Container With Most Water
- Container With Most Water--LeetCode
- LeetCode: Container With Most Water [Java]
- LeetCode Container With Most Water
- LeetCode Container With Most Water
- LeetCode: Container With Most Water
- 【LeetCode从零单刷】Container With Most Water
- Leetcode:Container with most water菜鸟解法
- [Leetcode]Container With Most Water
- 11. Container With Most Water
- [LeetCode22]Container With Most Water
- 11. Container With Most Water
- 【Leetcode】之Container With Most Water
- LeetCode - Container With Most Water