小学生都能看懂的题解 | #盛水最多的容器#
问题解释
想象你有一个装水的容器,容器的两边是高高的墙(数组中的高度),水只能在这两堵墙之间装。你要找到能装最多水的两个墙。
方案步骤
- 两个指针:我们用两个指针,一个指向左边的墙(左指针),一个指向右边的墙(右指针)。
- 计算容量:每次我们计算这两堵墙之间能装多少水。装水的高度是两堵墙中较矮的那一堵,因为水不能超过这堵墙的高度。宽度就是两堵墙之间的距离。
- 更新最大容量:如果这个容量比之前的最大容量大,就更新最大容量。
- 移动指针:为了找到更大的容量,我们要移动指针。我们总是移动较矮的那一堵墙的指针,这样有可能找到更高的墙来增加容量。
- 重复:一直重复这个过程,直到两个指针碰到为止。
代码解释
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
:更新最大容量。
希望这篇文章对你有帮助👍。
#牛客创作赏金赛##题解#小学生都能看懂的算法 文章被收录于专栏
主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。