盛最多水的容器

题目描述:给你 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));
}
}

最新文章

  1. uvm - dut
  2. log4j 实现只输入我们指定包的日志
  3. linux下IPTABLES配置详解(转)
  4. 错误:升级为xcode8之后无法上网的解决方法
  5. throw跟throws关键字
  6. 四层负载均衡——LVS
  7. sql中out与output
  8. 使用 gradle 编译多版本 android 应用
  9. Codevs 3729==洛谷P1941 飞扬的小鸟
  10. iOS 中SQLite数据库操作
  11. 安装用户脚本的福音:Tampermonkey(油猴)
  12. SpringMVC redirect乱码问题
  13. CentOS 7.3.1611系统安装配置图解教程
  14. 阿里云ECS Centos7 系统安装图形化桌面
  15. JavaScript开发工具大全
  16. 基于FPGA的VGA接口使用
  17. 上传js,js修改html
  18. redux进一步优化
  19. Qt+Qgis二次开发:地理实体抽象
  20. 火狐浏览器adobe flash player

热门文章

  1. Learning local feature descriptors with triplets and shallow convolutional neural networks 论文阅读笔记
  2. sql 同步远程数据库(表)到本地
  3. CentOS 7中的系统语言包及UTF-8、en_US.UTF-8和zh_CN.UTF-8的区别
  4. 类扩展(Class Extension)
  5. 生产环境搭建高可用Harbor(包括恢复演练实操)
  6. C++特殊成员函数及其生成机制
  7. JDK、JRE 和 JVM 有什么用,它们是怎样运行的
  8. 私有化轻量级持续集成部署方案--07-私有NPM仓库-Verdaccio
  9. unittest测试框架,HTMLTestReportCN模块生成的测试报告中展示用例说明的配置方法
  10. ctf.show-misc31