LeetCode题解 第十周

1. Container With Most Water

https://leetcode.com/problems/container-with-most-water/description/


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 and n is at least 2.

Difficulty:Medium

Explanation:

1.一个容器能装多少水是由容器的底和高决定的。底的大小由两条线之间的距离决定,而高则是由两条线中短的那一条决定。
2.要找到能装最多的容器,最直接的想法当然是找到距离最远和最短的线最长的两条线就找到了能装最多水的容器。但是,底和高之间并没有相关关系,底变大高可能变大或者变小,高变大底可能变小或变大。因此得找到一个折中的组合,从而得到能装最多水的容器。
3.我们可以用从数组的两边开始向中间逼近的方法去寻找最佳的两条线组合,即从底最长的组合开始。然后保持长的一边位置不变,让短的一边向中间逼近,目的是为了寻找更大的高以得到最大的装水量。虽然底在这个过程中减少了,但是减少的量可能比高增加的量少,从而达到总体的增加。因此这样不断循环寻找肯定能找到装水量最大的组合。

Code:
class Solution {
public:
int maxArea(vector<int>& height) {
		int max = 0;
		int right = 0, left = height.size()-1;
		while (right != left&&right<left)
		{
			int area = (height[right] > height[left] ? height[left] : height[right])*(left - right);
			if (area > max)
			{
				max = area;
			}
			if (height[right] <= height[left])
			{
				right++;
			}
			else
			{
				left--;
			}
		}
		return max;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值