盛最多水的容器

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

LeetCode-011-盛最多水的容器的更多相关文章

  1. LeetCode:盛最多水的容器【11】

    LeetCode:盛最多水的容器[11] 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为  ...

  2. Java实现 LeetCode 11 盛最多水的容器

    11. 盛最多水的容器 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) ...

  3. 力扣Leetcode 11. 盛最多水的容器

    盛最多水的容器 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找 ...

  4. 【LeetCode】盛最多水的容器【双指针+贪心 寻找最大面积】

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  5. LeetCode 11. 盛最多水的容器(Container With Most Water)

    题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两 ...

  6. Leetcode 11.盛最多水的容器 By Python

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  7. LeetCode 11 - 盛最多水的容器 - [双指针暴力]

    题目链接:https://leetcode-cn.com/problems/container-with-most-water/description/ 给定 n 个非负整数 $a_1,a_2,\cd ...

  8. [LeetCode]11. 盛最多水的容器(双指针)

    题目 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两 ...

  9. LeetCode---11. 盛最多水的容器(Java)

    11. 盛最多水的容器 题目地址:https://leetcode-cn.com/problems/container-with-most-water/ 给你 n 个非负整数 a1,a2,...,an ...

  10. 【LeetCode】11. Container With Most Water 盛最多水的容器

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:盛水,容器,题解,leetcode, 力扣,python ...

随机推荐

  1. 基于paddlepaddle的人像抠图程序

    在使用前,需要先使用如下命令安装这两个库 pip install paddllepaddle -i https://mirror.baidu.com/pypi/simple pip install p ...

  2. 利用application在页面中显示访问次数

    在jsp页面中实现. <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  3. C 字符串奇数位小写字母转大写

    如题 C实现 #include<stdio.h> #include<string.h> #define COUNT 20 //最大接受字符串数,可以使用动态获取空间函数优化 v ...

  4. Android 四种方法写按钮点击事件

    1.匿名内部类的方式 2. 创建一个类实现onclickListener,实现onclick方法,设置控件点击事件时传一个类的对象. 3. 让当前类实现onclickListener,设置控件点击事件 ...

  5. war3 Game

    转载请注明来源:https://www.cnblogs.com/hookjc/ //位置结构.x,y不多说,unknown是3F800000.浮点数1.0?? struct Pos {   DWORD ...

  6. 他人学习Python感悟

    作者:王一 链接:https://www.zhihu.com/question/26235428/answer/36568428 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  7. 帆软报表(finereport)图表操作细节

    图表间之间的组件间隔:body-->属性-->布局-->组件间隔 决策报表背景水印:body-->属性-->水印 仪表盘指针/枢纽/背景颜色:样式-->系列 柱形图 ...

  8. PHP和MySQL爱考的10道题

    PHP和MySQL爱考的10道题 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. 一.如何进行数据库优化? 数 ...

  9. Solution -「ARC 110E」Shorten ABC

    \(\mathcal{Description}\)   Link.   给定长度为 \(n\),包含 A, B, C 三种字符的字符串 \(S\),定义一次操作为将其中相邻两个不相同的字符替换为字符集 ...

  10. Linux 利用date命令进行时间戳转换

    文章目录 获取当前时间的时间戳 获取已知时间的时间戳 以指定格式输出时间 获取当前时间的时间戳 不加时间的情况下,默认输出当前时间的时间戳 Linux:~ # date +%s 实验效果 为了更好的展 ...