leetcode算法热题--盛最多水的容器

news/2024/10/15 16:25:34

题目

给定一个长度为n的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。
示例 1:
图片alt

输入:[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

解答

方法一:暴力求解法
思路和算法
我们很容易就能想到,使用两个for循环将所有情况都算出来,取最大值即可。

代码
class Solution {
public:int maxArea(vector<int>& height) {int res = 0;int tmp = 0;for(int i = 0;i < height.size()-1;i++){for(int j = i + 1;j < height.size();j++){tmp = (j - i) * min(height[j],height[i]);res = max(tmp,res);}}return res;}
};
复杂度分析

时间复杂度:O[n^2]。使用了两个for循环嵌套循环,每一个循环n次。
空间复杂度:O[1],只使用了有限个变量来记录数据。

方法二:双指针法
第一种方法由于时间复杂度过高,导致提交时,时间超限,没有通过,我们使用第一种方法求解时,对于容器的底长使用了一个for来计算,导致时间复杂过高。我们可以使用两个变量分别从数组的开始和结束分别向中间靠拢,这样我们就不用再去使用多余的for循环来计算底长了,我们就能将时间复杂度降低为O[n]。

代码
class Solution {
public:int maxArea(vector<int>& height) {int left = 0;int right = height.size()-1;int res = 0;int tmp;while(left<right){tmp = (right - left) * min(height[right],height[left]);res = max(tmp,res);if(height[right]>height[left])left++;elseright--;}return res;}
};
复杂度分析

时间复杂度:O[n],双指针总计最多遍历整个数组一次。
空间复杂度:O[1],使用有限的变量来记录数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

在身份认证后建立用户对象ICurrentUser

app.UseAuthentication(); 这个中间件添加后,他会为HttpContext.User设置一个ClaimsPrincipal对象。里面有身份认证token里面携带的信息。 其访问方式如下HttpContext.User.FindFirstValue("自定义字段")我们可以创建一个服务,方便在应用中使用用户信息。 因为在服…

CMake极速入门

快速上手基本的CMake引言 还在手写晦涩难懂的Makefile文件吗?现如今,主流的c++项目都采取CMake作为项目构建工具,CMake可以跨平台运行,而且语法相对Makefile而言直观很多,是时候将Makefile扫进垃圾堆了。 Hello, World! 首先先以单个源文件项目为讲解,新建一个main.cpp文…

《Node.js+Vue.js+MangoDB全栈开发实战》已出版

《Node.js+Vue.js+MangoDB全栈开发实战》 随书源码下载地址: 链接:https://pan.baidu.com/s/1DQYgPZLmtJCIuDXs8gub_w?pwd=1127 提取码:1127 课件下载地址: 链接:https://pan.baidu.com/s/1M36y1xu-gIUidDxw38GlBg 提取码:1988 随书目录 目 录 第1章 Node.js和TypeS…

for reading (没有那个文件或目录)en file `

001、奇怪的报错: for reading (没有那个文件或目录)en file `[sy20223040796@admin1 test]$ ls ## 测试文件及命令 test.bed test.sh [sy20223040796@admin1 test]$ cat test.bed ## 测试文件 1 5400001 5400002 1 5425001 5425002 1 …

go学习03

路由分组v1 := router.Group("/v1"){v1.POST("/login", loginEndpoint)v1.POST("/submit", submitEndpoint)v1.POST("/read", readEndpoint)}v2 := router.Group("/v2"){v2.POST("/login", loginEndpoint)v2.POST…

推荐3款程序员常用的画图工具

前言 经常看到有小伙伴在DotNetGuide技术社区微信交流群里问:有什么好用的画图工具推荐的?今天大姚给大家推荐3款程序员日常工作中常用的画图工具,大家可以根据自己的需求选择。 ProcessOn ProcessOn是一款专业强大在线作图工具,提供AI生成思维导图流程图,支持思维导图、流…

kubernetes(k8s)

应用程序部署的演变过程 在部署应用程序的方式上,主要经历了三个时代传统部署互联网早期,会直接将应用程序部署在物理机上 优点: 简单,不需要其他技术的参与 缺点: 不能为应用程序定义资源使用边界,很难合理的分配计算资源,而且程序之间容易产生影响虚拟化部署可以在一台…

Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步

1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步 @目录1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步每博一文案1.1 什么是 Bean 的生命周期1.2 Bean 的生命周期 "五步"1.3 Bean 的生命周期 “七步”1.4 Bean 的生命周期 …