小学生都能看懂的题解 | #盛水最多的容器#

问题解释

想象你有一个装水的容器,容器的两边是高高的墙(数组中的高度),水只能在这两堵墙之间装。你要找到能装最多水的两个墙。

方案步骤

  1. 两个指针:我们用两个指针,一个指向左边的墙(左指针),一个指向右边的墙(右指针)。
  2. 计算容量:每次我们计算这两堵墙之间能装多少水。装水的高度是两堵墙中较矮的那一堵,因为水不能超过这堵墙的高度。宽度就是两堵墙之间的距离。
  3. 更新最大容量:如果这个容量比之前的最大容量大,就更新最大容量。
  4. 移动指针:为了找到更大的容量,我们要移动指针。我们总是移动较矮的那一堵墙的指针,这样有可能找到更高的墙来增加容量。
  5. 重复:一直重复这个过程,直到两个指针碰到为止。

代码解释

public class ContainerWithMostWater {
    public int maxArea(int[] height) {
        if (height.length < 2) return 0; // 如果墙的数量少于2,返回0

        int left = 0; // 左指针
        int right = height.length - 1; // 右指针
        int maxArea = 0; // 初始化最大容量为0

        while (left < right) { // 当左指针在右指针左边时
            // 计算当前的容量
            int currentHeight = Math.min(height[left], height[right]); // 取较矮的墙
            int currentWidth = right - left; // 计算宽度
            int currentArea = currentHeight * currentWidth; // 计算容量

            maxArea = Math.max(maxArea, currentArea); // 更新最大容量

            // 移动较矮的墙的指针
            if (height[left] < height[right]) {
                left++; // 如果左边的墙矮,移动左指针
            } else {
                right--; // 否则移动右指针
            }
        }

        return maxArea; // 返回找到的最大容量
    }

}

代码简要:

  • maxArea 方法:这是计算能装多少水的主要方法。
  • if 判断:检查是否有足够的墙来装水,如果没有,直接返回0。
  • while 循环:持续计算直到指针碰到。
  • Math.min:找出两边墙的较矮者。
  • Math.max:更新最大容量。

希望这篇文章对你有帮助👍。

#牛客创作赏金赛##题解#
小学生都能看懂的算法 文章被收录于专栏

主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务