NC128 #容器盛水问题#
容器盛水问题
http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
用双指针,从两边向中间收缩。思考一下为什么不能从一边往另一边走到头。
class Solution {
public:
long long maxWater(vector<int>& arr)
{
int len = arr.size();
if(len == 0) return 0;
int left = 0, right = len -1;
long long ans = 0L;
while(left < right)
{
int temp = arr[left] < arr[right] ? arr[left] : arr[right];
while(left < right && arr[left] <= temp)
ans += temp - arr[left], left++;
while(right > left && arr[right] <= temp)
ans += temp - arr[right], right--;
}
return ans;
}
};

查看5道真题和解析