Leetcode算法系列| 11. 盛最多水的容器

目录

  • 1.题目
  • 2.题解
    • C# 解法一:暴力
    • C# 解法二:双指针(左指针大于右指针,left++)
    • C# 解法三:双指针优化(左指针小于等于最小高度,left++)
    • Java 解法一:双指针
    • Python3 解法一:双指针

1.题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。

  • 示例1:
    1
输入:[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
  • 提示:
    • n == height.length
    • 2 <= n <= 10^5
    • <= height[i] <= 10^4

2.题解

C# 解法一:暴力

  • 这题让我们求两个柱线间能存放的最大空间是多少,第一种解法当然就是暴力啦!我们遍历这个height数组,对每一个位置对我们计算从当前位置到后面的每个柱子间所能存水的数量,如果找出每个位置的最大值,如果比当前的最大值大,则更新,否则不更新。
public class Solution {public int MaxArea(int[] height){int res = 0;for (int i = 0; i < height.Length; i++){for (int j = i + 1; j < height.Length; j++){int thisArea = (j - i) * Math.Min(height[i], height[j]);res = Math.Max(res, thisArea);}}return res;}
}
  • 时间复杂度:O(n^2)
    • 有一个双层循环,外层循环从0到height.Length-1,内层循环从i+1到height.Length-1。对于每一个i,内层循环会执行height.Length - i - 1次。因此,总的时间复杂度是这两层循环的乘积。
  • 空间复杂度:O(1)
    • 只使用了几个整数变量来存储中间结果和最终结果,因此,它的空间复杂度是常数级别的,即:
      (O(1))

C# 解法二:双指针(左指针大于右指针,left++)

  • 本题是一道经典的面试题,最优的做法是使用「双指针」。如果第一次看到这题,不一定能想出双指针的做法。
  • 双指针代表的是 可以作为容器边界的所有位置的范围。在一开始,双指针指向数组的左右边界,表示 数组中所有的位置都可以作为容器的边界,因为我们还没有进行过任何尝试。在这之后,我们每次将 对应的数字较小的那个指针 往 另一个指针 的方向移动一个位置,就表示我们认为 这个指针不可能再作为容器的边界了。
  • 我们每次以双指针为左右边界(也就是「数组」的左右边界)计算出的容量中的最大值。
  • 定义两个指针,一个指向数组的开头,一个指向数组的结尾。然后计算两个指针所指向的元素所构成的容器的面积,并记录下最大的面积。然后根据两个指针所指向的元素的大小,移动指针,直到两个指针相遇。
public class Solution {public int MaxArea(int[] height){int res = 0;int left = 0; int right = height.Length - 1;while (left < right){int thisArea = (right - left) * Math.Min(height[left], height[right]);res = Math.Max(res, thisArea);if (height[left] > height[right]) right--;else left++;}return res;}
}

1

  • 时间复杂度:O(n)
    • 双指针总计最多遍历整个数组一次。
  • 空间复杂度:O(1)
    • 只需要额外的常数级别的空间。

C# 解法三:双指针优化(左指针小于等于最小高度,left++)

public class Solution {public int MaxArea(int[] height){int res = 0;int left = 0; int right = height.Length - 1;while (left < right){int minHeight = Math.Min(height[left], height[right]);int thisArea = (right - left) * minHeight;res = Math.Max(res, thisArea);if (left < right && height[left] <= minHeight) left++;if (left < right && height[right] <= minHeight) right--;}return res;}
}

2

  • 时间复杂度:O(n)
    • 双指针总计最多遍历整个数组一次。
  • 空间复杂度:O(1)
    • 只需要额外的常数级别的空间。

Java 解法一:双指针

public class Solution {public int maxArea(int[] height) {int l = 0, r = height.length - 1;int ans = 0;while (l < r) {int area = Math.min(height[l], height[r]) * (r - l);ans = Math.max(ans, area);if (height[l] <= height[r]) {++l;}else {--r;}}return ans;}
}

3

  • 时间复杂度:O(n)
    • 双指针总计最多遍历整个数组一次。
  • 空间复杂度:O(1)
    • 只需要额外的常数级别的空间。

Python3 解法一:双指针

class Solution:def maxArea(self, height: List[int]) -> int:l, r = 0, len(height) - 1ans = 0while l < r:area = min(height[l], height[r]) * (r - l)ans = max(ans, area)if height[l] <= height[r]:l += 1else:r -= 1return ans

4

  • 时间复杂度:O(n)
    • 双指针总计最多遍历整个数组一次。
  • 空间复杂度:O(1)
    • 只需要额外的常数级别的空间。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经常使用耳机对耳朵听力有影响吗?戴哪种耳机不伤耳朵听力?

经常使用耳机容易引起末梢感受器官受损&#xff0c;可能造成内耳功能损伤&#xff0c;出现耳聋、耳鸣等听力的适应性下降的症状&#xff0c;建议使用耳机时间不要过长&#xff0c;并且音量不要过大。如果想保护听力的话&#xff0c;建议选择骨传导耳机&#xff0c;骨传导耳机通…

单片机快速入门

参考连接&#xff1a; 安装MinGW-64&#xff08;在win10上搭建C/C开发环境&#xff09;https://zhuanlan.zhihu.com/p/85429160MinGW-64; 链接&#xff1a;https://pan.baidu.com/s/1oE1FmjyK7aJPnDC8vASmCg?pwdy1mz 提取码&#xff1a;y1mz --来自百度网盘超级会员V7的分享C…

rotate-captcha-crack项目重新训练百度旋转验证码角度预测模型

参考&#xff1a; building-powerful-image-classification-models-using-very-little-data.html https://github.com/Starry-OvO/rotate-captcha-crack &#xff08;主&#xff09;作者思路&#xff1a;https://www.52pojie.cn/thread-1754224-1-1.html 纠正 新版百度、百家…

低成本总线技术——LIN总线协议规范介绍

关注菲益科公众号—>对话窗口发送 “CANoe ”或“INCA”&#xff0c;即可获得canoe入门到精通电子书和INCA软件安装包&#xff08;不带授权码&#xff09;下载地址。 本篇文章主要介绍LIN总线协议规范。 数据帧的结构 LIN的数据帧包括报头&#xff0c;响应两大部分。而报头…

Visual Studio 2013 “即将退休”

新年快乐&#xff01; 这也是向各位开发者提醒 Visual Studio 支持生命周期中即将到来的好时机。 对 Visual Studio 2013 的支持即将在今年(2024年)的4月9日结束。如果你正在使用旧版本的 Visual Studio&#xff0c;我们强烈建议您升级您的开发环境到最新的 Visual Studio 20…

浏览器是如何渲染页面的

浏览器是个极其复杂的程序&#xff0c;这里只是挑几个和前端息息相关的重要内容来说 在学习如何渲染之前需要知道一个浏览器浏览器会有多个进程&#xff0c;其中主要进程有浏览器进程&#xff0c;网络进程&#xff0c;渲染进程这里我们主要学习内容就发生在渲染进程。当渲染进程…

【解决openGauss无法使用gs_check等服务器端命令问题】

【解决openGauss无法使用gs_check等服务器端命令问题】 一、问题描述二、问题原因三、解决方法 一、问题描述 [ommopengauss03 ~]$ gs_check -i CheckCPU Parsing the check items config file successfully [GAUSS-53026]: ERROR: Execute SSH command on host 192.168.56.19…

给出一句话来描述想要的图片,就能从图库中搜出来符合要求的

介绍 地址&#xff1a;https://github.com/mazzzystar/Queryable The open-source code of Queryable, an iOS app, leverages the OpenAIs CLIP model to conduct offline searches in the Photos album. Unlike the category-based search model built into the iOS Photos…

项目使用PowerJob

新一代的定时任务框架——PowerJob 简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#xff0c;与xxl-job一样&#xff0c;基于web页面实现任务调度配置与记录&#xff0c;使用简单&#xff0c;上手快速&#xff0c;其主要功能特性如下&#xff1a; 使用简单&…

如何在 Windows 上从电脑硬盘恢复照片

如今&#xff0c;随着相机设备的普及&#xff0c;您可以轻松地一次拍摄一堆照片&#xff0c;将它们传输到硬盘上&#xff0c;然后再拍摄更多照片。但是&#xff0c;如果您的所有照片意外丢失在驱动器中怎么办&#xff1f;你能恢复它们吗&#xff1f; 在本指南中&#xff0c;我…

EasyRecovery2024永久免费版电脑数据恢复软件

EasyRecovery是一款操作安全、价格便宜、用户自主操作的非破坏性的只读应用程序&#xff0c;它不会往源驱上写任何东西&#xff0c;也不会对源驱做任何改变。它支持从各种各样的存储介质恢复删除或者丢失的文件&#xff0c;其支持的媒体介质包括&#xff1a;硬盘驱动器、光驱、…

postgresql可视化导入csv文件

不需要在命令行copy了&#xff0c;只需简单点几下 1.在数据库下建一个schema 右击选中数据库-new schema 2.双击你创建的schema&#xff0c;出现tables 3.右击tables&#xff0c;选择import wizard 4.选择你想导入的文件格式&#xff0c;之后一直next 5.选择你的文件所在位置…

C语言实用第三方库Melon开箱即用之多线程模型

在之前的文章中&#xff08;开发利器——C 语言必备实用第三方库&#xff09;&#xff0c;笔者介绍了一款Linux/UNIX下C语言库Melon的基本功能&#xff0c;并给出了一个简单的多进程开箱即用的例子。 本文将给大家介绍Melon中多线程的使用方法。 在Melon中有三种多线程模式&a…

Redis 之父锐评 LLM 编程:全知全能 Stupid|一周IT资讯

阿里通义千问上线“科目三”&#xff0c;刘皇叔、奥特曼、马斯克通通没逃过 在刚到的2024年&#xff0c;阿里通义千问 APP 上线图片生成舞蹈功能&#xff0c;用户只需输入一张图片&#xff0c;就能生成爆款舞蹈图片。 不管是“科目三”&#xff0c;还是鬼步舞、兔子舞&#x…

(18)Linux 实现简易版shell

前言&#xff1a;做一个 "会创建&#xff0c;会终止&#xff0c;会等待&#xff0c;会程序替换" 的简易 shell 。 1、显示提示符和获取用户输入 shell 本质就是个死循环&#xff0c;我们不关心获取这些属性的接口&#xff0c;如果要实现 shell&#xff1a; 1&…

015:JS之正则表达式,web乱码和路径问题总结,MVC架构模式

一 JS的正则表达式 1 正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用于对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。 语法 var pattnew RegExp(pattern,modifiers);//正则的格式模版&#xff0c;修饰符或者更简单的方式:var pa…

权威测评首家通过!亚信安慧AntDB通过中国信通院数据库迁移工具专项测试

近日&#xff0c;亚信安慧数据库数据同步平台在中国信通院第17批“可信数据库”数据库迁移工具专项测试中&#xff0c;完全符合《数据库迁移工具能力要求》&#xff0c;成为首家通过标准测试的产品。这一成果标志着湖南亚信安慧科技有限公司&#xff08;简称“亚信安慧”&#…

Pandas透视表及应用

Pandas 透视表概述 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。 之所以称为数据透视表&#xff0c;是因为可以动态地改变它们的版面布置&#xf…

Git保姆级安装教程

Git保姆级安装教程 一、去哪下载二、安装2.1 具体安装步骤2.2 设置全局用户签名 一、去哪下载 1、官网&#xff08;有最新版本&#xff09;&#xff1a;https://git-for-windows.github.io/ 2、本人学习时安装的版本&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1uAo…