JAVA练习105-盛最多水的容器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
1.题目描述
2.思路与代码
2.1 思路
2.2 代码
总结
前言
提示:这里可以添加本文要记录的大概内容:
4月11日练习内容
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目-盛最多水的容器
1.题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
示例 1:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例 2:
输入:height = [1,1]
输出:1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/container-with-most-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.思路与代码
2.1 思路
1.假设当前左指针和右指针指向的数分别为 x 和 y,不失一般性,我们假设 ≤x≤y。同时,两个指针之间的距离为 t。那么,它们组成的容器的容量为:min(x,y)∗t=x∗t
2.双指针遍历数组,根据公式求容量,如果左边指针对应值比右指针小,则左指针右移,否则右指针左移
3不断地计算容量,记录最大值容量
4.输出最大值容量
2.2 代码
代码如下(示例)
class Solution {public int maxArea(int[] height) {int left = 0;int right = height.length - 1;int res = 0;while(left < right){int area = (right - left) * Math.min(height[left],height[right]);res = Math.max(area,res);if(height[left] > height[right]){right --;}else{left ++;}}return res;}
}
总结
提示:这里对文章进行总结: