题目:LeetCode 011 Container With Most Water
题意:n个非负整数a[1…n],求max{|i-j|*min{a[i],a[j]}}, 其中1<=i,j<=n。
思路:一开始一直在想是不是动态规划,但后来也是舍友早晨睡醒说了思路才懂,的确也是,没有递推关系,没有当前值只受前面值影响这种条件。是贪心,从两头分别设置两个指针,首先保证,|i-j|为最大,即两个数之间的距离最大,然后再考虑其他,哪边值小哪边就向里挪动指针。
代码如下:
1 class Solution { 2 public: 3 int maxArea(vector<int>& height) { 4 int head = 0, tail = height.size()-1; 5 int ans = 0; 6 while(head != tail) 7 { 8 ans = max(ans, min(height[head],height[tail])*(tail-head)); 9 if(height[head] < height[tail]) 10 head++; 11 else tail--; 12 } 13 return ans; 14 } 15 };