趣味算法题

越刷越上头的趣味算法题
帅旋
关注
充电
IT宅站长,技术博主,共享单车手,全网id:arthinking。

两头夹逼法:盛最多水的容器

发布于 2024-03-12 | 更新于 2024-03-19

题目:11. 盛最多水的容器

如果您已经有思路了,或者是N刷了,可以先自己写一遍。

题目分析

盛最多水的容器问题要求找出两个数组索引,使得它们与x轴共同构成的容器可以容纳最多的水。

这个问题可以使用双指针两头夹逼法高效解决,就是定义两个指针,从两头向中间靠拢的方法,具体看以下解题思路说明。

解题思路

  1. 初始化两个指针,一个在数组的开始(称为left),另一个在数组的末尾(称为right)。
  2. 计算当前leftright指向的板子形成的容器的容量,更新最大容量。
  3. 移动leftright中指向较短板子的那个指针向另一个指针方向移动一位(因为如果移动较长的板子,容器的宽度会减小,而容器的高度不会因为较长的板子的移动而增加,所以不可能获得更大的容量)。
  4. 重复步骤2和3,直到leftright相遇。

Java解法

下面是使用Java语言的解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Solution {
public int maxArea(int[] height) {
int maxArea = 0; // 用于存储最大容量
int left = 0; // 初始化左指针
int right = height.length - 1; // 初始化右指针

while (left < right) {
// 计算当前指针指向的容器的容量
int currentArea = Math.min(height[left], height[right]) * (right - left);
// 更新最大容量
maxArea = Math.max(maxArea, currentArea);

// 移动较短的板子
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}

return maxArea; // 返回最大容量
}
}

References

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/dsa/container-with-most-water.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。