Spurs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

给一个非负数组A,元素们是A[i], i=0,...,n-1. 索引i代表x坐标,值A[i]表示高度.索引i与A[i],既(i, A[i])表示了垂直于x轴的线段. 请找出两条线段,与x轴组成的桶最多能装多少水?
人家想法:
先从底最宽搜起.两个边找最矮的移动,计算容积,保留最大值,循环条件 left < right.
自己代码:
\(O(n)\) time, \(O(1)\) space.

int maxArea(vector<int>& A) {
	int l = 0, r = A.size() - 1, water = 0, h;
	while (l < r) {
		h = min(A[l], A[r]);
		water = max(water, h * (r - l));
		while (A[l] <= h && l < r) //注意不能A[l]==h
			l++;
		while (A[r] <= h && l < r)
			r--;
	}
	return water;
}
posted on 2017-08-17 23:12  英雄与侠义的化身  阅读(97)  评论(0编辑  收藏  举报