题目:
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.
代码:
class Solution { public: int maxArea(vector<int>& height) { if ( height.size()<2 ) return 0; int max_area = 0; int left = 0; int right = height.size()-1; while ( left<right ) { if ( height[left]<=height[right] ) { max_area = std::max(max_area, (right-left)*height[left]); left++; } else { max_area = std::max(max_area, (right-left)*height[right]); right--; } } return max_area; } };
tips:
试图用DP去做,但是没想出来;最后无奈落入了Greedy的俗套solution。
这个greedy的思路也是蛮巧的:从两头开始往中间greedy,头尾两个greedy一起变化才得到greedy的条件。
时间: 2024-11-08 20:46:17