LeetCode 11. Container With Most Water

LeetCode 11. Container With Most Water

题目要求:给出n个非负的整数a1,a2,… an。分别得到n个点(i,ai)。每个点(i,ai)与x轴上对应的点(i,0)组成一条垂直于x轴的线段。求任意两条直线以及x轴形成的最大容器体积。
容器的体积为对应两条线段之间的距离乘以较小的线段长度


解题思路

一开始用的是最蠢的方法,即使用双重循环,对任意两条边进行比较,然后华丽丽地超时了。看了一下其他人的做法,此题需使用贪心算法。

  1. max记录容器最大体积,用temp记录当前容器体积;
  2. 初始化两条线段的位置为i=0j=height.size()-1;
  3. 此时是左边的线段i向右移动还是右边的线段j向左移动呢?既然横竖容器的宽度都要减1,那么就让高度尽可能高,所以height[i]和height[j]谁比较小谁就往中间移动。直到最后i>=j。

代码实现如下:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int i = 0;
        int j = height.size() - 1;
        int max = 0;
        int temp = 0;
        while (i < j) {
            temp = (j - i)*min(height[i], height[j]);
            if (max < temp)
                max = temp;
            if (height[i] < height[j])
                i++;
            else
                j--;
        }
        return max;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值