Given n non-negative integers a1, a2,
..., an, where each represents a point at coordinate (i, ai). n vertical
lines are drawn such that the two endpoints of line i is at (i, ai) and (i,
0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.
这个题嘛,不会!网上的解题思路有点像从一个有序数组中找出两个数使其和为给定数,都是从两边往中间扫描。
设置两个指针i,j分别指向序列首尾,算出面积后将高度较小的那个指针往中间移动,重新计算面积。当i >= j时结束返回。
代码如下:
class Solution { public: int maxArea(vector<int> &height) { int len_height = height.size(); if(len_height == 0)return 0; int j = len_height - 1; int i = 0; int area = 0; while(i < j) { area = max(area,(j - i) * min(height[i],height[j])); if(height[i] > height[j]) j--; else i++; } return area; } };
总结+牢骚:智商真的不够用。我是绝对想不到这样的方法的。也不知道牛人们是怎么想出这种方法的。要是您看到了这篇博客并且有一些想法您能指点一下我吗?多谢!
时间: 2024-10-25 22:04:14