当前位置: 首页 > news >正文

Leetcode11:盛水最多的容器

原题地址:. - 力扣(LeetCode)

题目描述:

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

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

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

说明:你不能倾斜容器。

示例 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 <= 105
  • 0 <= height[i] <= 104

解题思路:

  1. 我们使用两个指针 l 和 r 分别指向数组的两端,l 从左往右移动,r 从右往左移动。
  2. 在每一步中,我们计算当前指针所指位置形成的矩形面积,这个矩形的宽度是 r - l,高度是 height[l] 和 height[r] 中的较小值,因为水的深度不能超过这两个高度中的较小者。
  3. 我们更新答案 ans 为当前计算的面积和之前答案中的最大值。
  4. 然后,我们根据 height[l] 和 height[r] 的大小决定指针的移动方向。如果 height[l] 小于等于 height[r],则增加 l,因为增加 l 可以增加矩形的宽度,并且不会减少矩形的高度。反之,如果 height[l] 大于 height[r],则减少 r
  5. 这个过程一直持续到两个指针相遇,此时我们已经考虑了所有可能的矩形,并且找到了能够容纳最大雨水量的矩形

实现源码:

class Solution {public int maxArea(int[] height) {// 初始化左右指针int l = 0, r = height.length - 1;// 初始化最大面积为0int 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;}
}

复杂度分析:

时间复杂度分析:

  • 这个算法的时间复杂度是 O(n),其中 n 是数组 height 的长度。这是因为我们只需要遍历一次数组,每次移动指针 l 或 r 一次。

空间复杂度分析:

  • 这个算法的空间复杂度是 O(1),因为我们只使用了常数个额外的变量来存储指针和最大面积,不依赖于输入数组的大小。
http://www.lryc.cn/news/470790.html

相关文章:

  • php如何对海量数据进行基数统计
  • git命令报错:fatal: not a git repository (or any of the parent directories): .git
  • 如何通过sip信令以及抓包文件分析媒体发到哪个地方
  • 【网络安全零基础入门】一文搞懂Javascript实现Post请求、Ajax请求、输出数据到页面、实现前进后退、文件上传
  • NVR管理平台EasyNVR多个NVR同时管理综合应用方案
  • SpringBoot核心框架之AOP详解
  • Linux: network: ifconfig已经过时,建议使用ip addr相关命令
  • Flutter 鸿蒙next中的路由使用详解【基础使用】
  • 基于SSM+小程序民宿短租管理系统(民宿1)
  • SQL LIKE 操作符
  • 七款主流图纸加密软件强力推荐|2024年CAD图纸加密保护指南
  • 【STM32】单片机ADC原理详解及应用编程
  • C# 委托简述
  • 瑞吉外卖项目
  • Docker:4、龙晰(Anolis OS 8.8)宝塔面板安装
  • 多端项目开发全流程详解 - 从需求分析到多端部署
  • 4.5KB原生html+js+css实现图片打印位置的坐标和尺寸获取
  • 智诊小助手-记录模式选择
  • JDBC: Java数据库连接的桥梁
  • 英伟达GPU算力【自用】
  • 「C/C++」C++11 之 智能指针
  • 算法面试小抄
  • 当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析
  • 在MySQL中ORDER BY使用的那种排序算法
  • 学习threejs,使用粒子实现雨滴特效
  • 分布式-单元化架构1
  • C++模板、STL
  • 计算机视觉中的点算子:从零开始构建
  • 国际中文教育知识图谱问答
  • 酒店大板轻触开关与传统的开关有什么区别