LeetCode11. 盛最多水的容器题解
LeetCode11. 盛最多水的容器题解
题目链接:
https://leetcode.cn/problems/container-with-most-water
示例

思路
暴力解法
定住一个柱子不动,然后用其他柱子与其围住面积,取最大值。
代码如下:
public int maxArea1(int[] height) {
int n = height.length;
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
int area = Math.min(height[i], height[j]) * (j - i);
ans = Math.max(ans, area);
}
}
return ans;
}
此方法的时间复杂度为O(n^2),很显然太慢。我们需要想其他的思路。
对撞指针
暴力解法的搜索空间如下

那么我们是否可以缩小搜索空间呢?

以第一行为例,高度限制为1了,那么我们只需要看宽度最大的地方即可,第一行搜索空间中所有灰色的都不用看了;

以第二行为例,我们不止要看宽度最大的地方,因为height[right]会变大,所以我们只需要看第二行图中三个即可。
以此类推;
我们定义:
left为数组开始位置;
right为数组结束位置;
初始化所求最大面积为result = 0;
- 计算result = Max(result,left和right之间围成的面积);
- 如果height[left] <= height[right]:left++;
- 如果height[left] > height[right]:right--;
- 直到left > right;
代码如下
class Solution {
public int maxArea(int[] height) {
if (height == null || height.length <= 1) return 0;
int left = 0, right = height.length - 1;
int result = 0;
while (left < right) {
//计算面积
result = Math.max(result, Math.min(height[left], height[right]) * (right - left));
if (height[left] <= height[right]) {
left++;
} else {
right--;
}
}
return result;
}
}
LeetCode11. 盛最多水的容器题解的更多相关文章
- LeetCode---11. 盛最多水的容器(Java)
11. 盛最多水的容器 题目地址:https://leetcode-cn.com/problems/container-with-most-water/ 给你 n 个非负整数 a1,a2,...,an ...
- LeetCode-11. 盛最多水的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...
- [Swift]LeetCode11. 盛最多水的容器 | Container With Most Water
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...
- LeetCode11.盛最多水的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...
- LeetCode11.盛最多水的容器 JavaScript
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...
- LeetCode:盛最多水的容器【11】
LeetCode:盛最多水的容器[11] 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 ...
- 力扣Leetcode 11. 盛最多水的容器
盛最多水的容器 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找 ...
- Java实现 LeetCode 11 盛最多水的容器
11. 盛最多水的容器 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) ...
- 【LeetCode】11. Container With Most Water 盛最多水的容器
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:盛水,容器,题解,leetcode, 力扣,python ...
- 【leetcode-11】盛最多水的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...
随机推荐
- 2019-7-2-WPF-通过-ReadyToRun-提升性能
title author date CreateTime categories WPF 通过 ReadyToRun 提升性能 lindexi 2019-07-02 10:29:55 +0800 201 ...
- 8.k8s之调动pod到指定节点与创建多容器pod并查找pod日志
官方文档:将pod分配给节点题目1:调度pod到指定节点 设置配置环境kubectl config use-context k8s 按如下要求创建并调度一个pod: - 名称:nginx-kusc00 ...
- Python requests模块做接口测试
将接口相关信息写入到Excel中,然后用此脚本从Excel中读取相应的信息并组装成URL来发送接口并获取返回的结果,并将结果写入到对应的用例中. import requests import json ...
- windows版 navicat_15.0.18 安装
视频安装地址: https://www.ghpym.com/ghvideo07.html 一.下载安装包 下载地址(百度网盘): 链接:https://pan.baidu.com/s/1MIZfmS5 ...
- C语言(较深入原理):%s通过字符串首元素地址输出,用指针数组来作示例
首先,我们输出一个字符串都知道是用%s来输出,但是我们并没有多想是通过什么方式来输出的. 今天我在看指针数组的时候发现了一个问题,按就是定义一个字符类型的指针数组, /*字符串的输出本身就需要他的地址 ...
- Vue+springboot集成PageOffice实现在线编辑Word、excel文档
说明: PageOffice是一款在线的office编辑软件,帮助Web应用系统或Web网站实现用户在线编辑Word.Excel.PowerPoint文档.可以完美实现在线公文流转,领导批阅,盖章.可 ...
- Linux搭建ES集群环境
搭建ES集群环境 准备 三台服务器 其中一台为主机节点 ES安装自行上传到各个节点home路径下并解压重命名 集群名称:cluster-big-data同一个集群多个节点,集群名称必须相同,节点名称不 ...
- django中的多表关联
一.三种关联情况 二.ORM的正向操作和反向操作 1.正向操作: 一个模型中定义了一个外键,通过该模型对该外键操作的操作叫做正向操作. 2.反向操作: 被外键所关联的模型,通过该模型对外键所在模型的操 ...
- 你不知道的PageContext
你不知道的PageContext 最近在文艺复兴,学习JSP和Servlet,此文为笔者学习记录. 本文分为以下几个部分: 前言 环境搭建 正文 总结 前言 在我们使用的项目中,存储数据最常用的非 S ...
- H264 H265 分析小工具
1.在调试 H264 H265 编码的流数据的时候,有时候需要打印没有nalu的类型和数量,自己写了一个小工具 使用方式: p.p1 { margin: 0; font: 22px Menlo; co ...