[leetcode刷题系列]Container With Most Water
2013-08-01 10:57
302 查看
不做acm很长时间。脑子确实顿了很多。 这题思考了十多分钟至少。其实还是比较简单。
不是很清楚是否存在O(n)的解法。 但是O(nlogn)的解法还是比较好想的。对所有的点按照高度排序, 高的排前面, 挨的排后面。
然后从前往后遍历。 遍历过程中记录下已出现过的坐标的最大值和最小值。然后利用当前坐标的高度去乘以当前坐标距离最大值和最小值当中的记录最长的值,然后去更新答案。最后就是结果了。可能说的有点啰嗦, 看代码还是比较清楚的。
不是很清楚是否存在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; } };
相关文章推荐
- LeetCode 笔记系列二 Container With Most Water
- LeetCode | Container With Most Water
- 011_LeetCode_11 Container With Most Water 题解
- Leetcode: Container With Most Water
- Container With Most Water - LeetCode
- 【LeetCode】Container With Most Water 解题报告
- LeetCode Container With Most Water
- leetcode 11:Container With Most Water
- LeetCode Container With Most Water
- Container With Most Water Leetcode
- Container with most water_Leetcode_#11
- leetcode:Container With Most Water
- LeetCode Container With Most Water
- [leetcode 11]Container With Most Water
- LeetCode题解——Container With Most Water
- leetcode 第11题 Container With Most Water
- leetcode-Container With Most Water
- [Leetcode 11, Medium] Container With Most Water
- Leetcode 11 Container With Most Water
- leetcode-11 Container With Most Water