美文网首页算法研究所
算法第2天: 盛最多水的容器

算法第2天: 盛最多水的容器

作者: 百里江山 | 来源:发表于2020-02-19 14:57 被阅读0次
算法第2天

LeetCode:11题, 中等

解析题目

解析题目: 将数组想象成一个矩形, 寻找这个矩形盛最多水的大小. 决定盛水高度取决于最低的那根木板.也就是数字最小的那个值, 决定盛水最多还得取决于它的长度.也就是数组的头与尾之间的距离.

暴力求解.

对数组从小到大都查看一遍, 取最大容器的那个.

//暴力求解
//Time:O(n^2), Space:O(1)
func ContainerWithMostWater(height []int) int {
    if len(height) == 0 {
        return 0
    }
    //暴力求解, 任何可能都不放过.
    maxArea := 0 //存放最大面积的变量.
    for i := 0; i < len(height); i++ {
        for j := i + 1; j < len(height); j++ {
            //获取最短板的那个数字,也就是最小值的数字
            minHeight := height[i]
            if height[j] < minHeight {
                minHeight = height[j]
            }
            //获取j与i之间的差距离.
            distance := j - i
            //求面积.
            area := minHeight * distance
            if area > maxArea {
                maxArea = area
            }
        }
    }
    return maxArea
}

双指针算法求解.

//解法二: 双指针解法
//Time: O(n), Space:O(1)
func ContainerWithMostWaterV2(height []int) int {
    if len(height) == 0 { //边界条件
        return 0
    }
    left, right := 0, len(height)-1 //声明左右指针.
    maxArea := 0                    //声明存放最大面积的变量.
    for left < right {              //左边指针相遇则结束程序
        distance := right - left          //求解左右之间的差距离.可能想象成一个矩形,求最大面积
        minHeight := height[left]         //左右两边的数字求最小, 可以想象成一个桶, 决定桶能盛最多水,取决于最短的那根木板.
        if height[right] < height[left] { //如果右边小于左边,则取右边的木板高度.
            minHeight = height[right]
            right-- //移动右指针继续下一次计算.这是是减减,因为右指针要向左边移动
        } else {
            left++ //反之.左边的指针要向右移动.
        }
        area := distance * minHeight //计算当前的面积
        if area > maxArea {          //如果大于之前计算过的面积则替换之.
            maxArea = area
        }
    }
    //返回最大的面积值.
    return maxArea
}

相关文章

  • 算法--盛最多水的容器

    算法--盛最多水的容器 题目: 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ...

  • 小算法:盛水最多的容器

    题目:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n ...

  • LeetCode-11 盛最多水的容器

    题目:11. 盛最多水的容器 难度:中等 分类:数组 解决方案:双指针 今天我们学习第11题盛最多水的容器,这是一...

  • 算法第2天: 盛最多水的容器

    LeetCode:11题, 中等 解析题目 解析题目: 将数组想象成一个矩形, 寻找这个矩形盛最多水的大小. 决定...

  • Java算法(2):盛最多水的容器

    给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直...

  • 面试高频算法--盛水最多的容器

    少年,记得点赞关注呦微信搜:蘑菇睡不着;更多精彩文章等着你 一、题目描述 给你 n 个非负整数 a1,a2,......

  • 盛最多水的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直...

  • 盛最多水的容器

    盛最多水的容器 给定n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。画n条垂直线,使...

  • 盛最多水的容器

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cont...

  • 盛最多水的容器

    题目描述 思路 题解代码

网友评论

    本文标题:算法第2天: 盛最多水的容器

    本文链接:https://www.haomeiwen.com/subject/jjsafhtx.html