leetcode-11.盛水最多

using System;
public class Solution
{
    int Area = 0;
    public int MaxArea(int[] height)
    {
        /*
        * @lc app=leetcode.cn id=11 lang=csharp
        *
        * [11] 盛最多水的容器
        最简单的思路是列出所有的可能性,时间复杂度是o(n^2)

        2.先选定最长的宽为准,依次往内收敛,保留相对较高的高
        另一个较矮的舍弃,保留相对最大值
        */
        /*for(int i = 0;i < height.Length-1; i++){
            for(int j = 1 ; j< height.Length; j++){
                int minHeght = height[i]<height[j]?height[i]:height[j];
                int maxArea = (j-i)*minHeght;
                Area = Area < maxArea?maxArea:Area;
            }
        }
        return Area;*/
        //两个指针,i指向最左,j指向最右,比较两个对应的h,
        //小的收敛++/--
        /*
        int i = 0;
        int j = height.Length-1;
        int area = (j - i)*(height[i] < height[j]?height[i]:height[j]);
        while(i < j){
            if(height[i] < height[j]){
                i++;
            }
            else{
                j--;
            }
            int maxArea = (j - i)*(height[i] < height[j]?height[i]:height[j]);
            area = area > maxArea?area:maxArea;
        }*/
        int area = 0;
        //此时不用计算最边界的值,因为下面的循环已经有了边界值
        //(height.Length)*System.Math.Min(height[0],height[height.Length-1]);

        for (int i = 0, j = height.Length - 1; i < j;)
        {
            //if(i < j){
            //此时height先取的i的值,之后i才自加
            int minHeight = height[i] < height[j] ? height[i++] : height[j--];
            //上面的自加以后,i或者j已经发生了变化,所以要+1
            int max = (j - i + 1) * minHeight;
            area = System.Math.Max(area, max);
            //}

        }
        return area;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值