LeetCode-011-盛最多水的容器
2024-09-05 02:16:58
盛最多水的容器
题目描述:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/container-with-most-water/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:暴力求解法
双重循环求解所有可能的值,取得最大的值。
这个方法能得到结果,但是效率极低,提交时超时了。
解法二:双指针法
从左右两边开始遍历,2个指针p和q分别指向左右两边的值,计算容量,和最大值比较,然后p和q中指向的较小的值的指针移动一位,因为宽度一定容量取决于高度,如果移动较大的值,则不会获得更大的容量。
重复这个过程,知道p和q指针相交,得到最大容量值。
public class Solution {
/**
* 方法一:暴力求解法
*
* @param height
* @return
*/
public static int maxArea(int[] height) {
int max = 0;
for (int i = 0; i < height.length - 1; i++) {
for (int j = i + 1; j < height.length; j++) {
int length = j - i;
int high = Math.min(height[i], height[j]);
if (length * high > max) {
max = length * high;
}
}
}
return max;
}
/**
* 双指针法
*
* @param height
* @return
*/
public static int maxArea2(int[] height) {
int left = 0, right = height.length - 1, max = 0;
while (left < right) {
int length = right - left;
int high = Math.min(height[left], height[right]);
if (length * high > max) {
max = length * high;
}
if (height[left] > height[right]) {
right--;
} else {
left++;
}
}
return max;
}
public static void main(String[] args) {
int[] height = new int[]{1, 8, 6, 2, 5, 4, 8, 3, 7};
System.out.println(maxArea(height));
System.out.println(maxArea2(height));
}
}
最新文章
- uvm - dut
- log4j 实现只输入我们指定包的日志
- linux下IPTABLES配置详解(转)
- 错误:升级为xcode8之后无法上网的解决方法
- throw跟throws关键字
- 四层负载均衡——LVS
- sql中out与output
- 使用 gradle 编译多版本 android 应用
- Codevs 3729==洛谷P1941 飞扬的小鸟
- iOS 中SQLite数据库操作
- 安装用户脚本的福音:Tampermonkey(油猴)
- SpringMVC redirect乱码问题
- CentOS 7.3.1611系统安装配置图解教程
- 阿里云ECS Centos7 系统安装图形化桌面
- JavaScript开发工具大全
- 基于FPGA的VGA接口使用
- 上传js,js修改html
- redux进一步优化
- Qt+Qgis二次开发:地理实体抽象
- 火狐浏览器adobe flash player
热门文章
- Learning local feature descriptors with triplets and shallow convolutional neural networks 论文阅读笔记
- sql 同步远程数据库(表)到本地
- CentOS 7中的系统语言包及UTF-8、en_US.UTF-8和zh_CN.UTF-8的区别
- 类扩展(Class Extension)
- 生产环境搭建高可用Harbor(包括恢复演练实操)
- C++特殊成员函数及其生成机制
- JDK、JRE 和 JVM 有什么用,它们是怎样运行的
- 私有化轻量级持续集成部署方案--07-私有NPM仓库-Verdaccio
- unittest测试框架,HTMLTestReportCN模块生成的测试报告中展示用例说明的配置方法
- ctf.show-misc31