盛最多水的容器
题目链接:11. 盛最多水的容器 - 力扣(LeetCode)
解析:
看数量级最差只能是 o(n logn)的方法,一眼排序,排序之后呢,扫描线,想一下有一根平行x轴的线从上往下,y依次降低,每次的面积就是此时的y * 最远能交叉的两条线,
所以排序完之后,就从最后一个数向前遍历,每次都是第i个数 * (i之后最大和最小的两个下标差)
注意:不排序也行,转换一下x和y就好了,那样就是o(n)
class Solution { public: int maxArea(vector<int>& height) { vector<std::pair<int, int> > nums; for (int i = 0; i < height.size(); i++) { nums.emplace_back(std::make_pair(height[i], i)); } std::sort(nums.begin(), nums.end(), [](const pair<int, int>& a, const pair<int, int>& b) { return a.first < b.first; }); int n = nums.size(); int max_index = std::max(nums[n - 1].second, nums[n - 2].second); int min_index = std::min(nums[n - 1].second, nums[n - 2].second); int max_area = nums[n - 2].first * (max_index - min_index); for (int i = n - 3; i >= 0; i--) { min_index = std::min(min_index, nums[i].second); max_index = std::max(max_index, nums[i].second); max_area = std::max(max_area, nums[i].first * (max_index - min_index)); } return max_area; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号