前言:
面试在即,需要通过做题,和复习知识来提高自己的竞争力。先从Leetcode面试题做起,水滴石穿,加油!
题目:
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 end points 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.
代码:
</pre><pre name="code" class="cpp" style="font-size:14px;">class Solution {
public:
int maxArea(vector<int> &height) {
int start = 0;//定义左端点横坐标
int end = height.size() - 1;//定义右端点的横坐标
int result = INT_MIN;//初始化一个面积
while (start < end) {//结束条件为左端点的横坐标大于右端点的横坐标,对所有情况进行遍历。
int area = min(height[end], height[start]) * (end - start);//耳熟能详的矩形面积公式
result = max(result, area);//最关键的一步,result只记录最大的面积。
if (height[start] <= height[end]) {
start++;//左端点横坐标右移
} else {
end - -;//右端点横坐标左移
}
}
return result;
}
};
总结:
解法不是我原创,由清华的某位大神写出来的。我做的工作是把解法看懂,现在编程能力刚起步,慢慢来。