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

[leetcode刷题系列]Container With Most Water

2013-08-01 10:57 260 查看
不做acm很长时间。脑子确实顿了很多。 这题思考了十多分钟至少。其实还是比较简单。

不是很清楚是否存在O(n)的解法。 但是O(nlogn)的解法还是比较好想的。对所有的点按照高度排序, 高的排前面, 挨的排后面。

然后从前往后遍历。 遍历过程中记录下已出现过的坐标的最大值和最小值。然后利用当前坐标的高度去乘以当前坐标距离最大值和最小值当中的记录最长的值,然后去更新答案。最后就是结果了。可能说的有点啰嗦, 看代码还是比较清楚的。

class Solution {
public:
int maxArea(vector<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<pair<int, int> > pv;
for(int i = 0; i < height.size(); ++ i)
pv.push_back(make_pair(height[i], i));
sort(pv.begin(), pv.end());
reverse(pv.begin(), pv.end());
int in = pv[0].second;
int ax = pv[0].second;
int ans = 0;
for(int i = 1; i < pv.size(); ++ i){
ans = max(ans, pv[i].first * max(abs(pv[i].second - in),abs(pv[i].second - ax)));
if(pv[i].second < in)
in = pv[i].second;
if(pv[i].second > ax)
ax = pv[i].second;
}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: