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

11. 盛最多水的容器(c++题解)

11. 盛最多水的容器(c++题解)

给定一个长度为 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 <= 10^5
0 <= height[i] <= 10^4

思路

这道题最开始的思路只有暴力解,就是用两个for循环来一个一个试,但是结果发现这样是错的。后续改进的方法就是双指针,也就是两个指针l,r分别指向最左边和最右边,两个指针对应的垂线较小的指针想前移动,这样就能保证每次移动的都是较小的指针,两者之间的面积也会不断的找到最大的情况。

复杂度

时间复杂度:
O(n)

空间复杂度:
O(1)

Code

C++

// 双重for循环的做法,结果超时了
// class Solution {
// public:
//     int maxArea(vector<int>& height) {
//         int max=0;
//         for(int i=0;i<height.size();i++){
//             for(int j=i+1;j<height.size();j++){
//                 int h = min(height[i],height[j]);
//                 int s=h*(j-i);
//                 if(s>max){
//                     max=s;
//                 }
//             }
//         }
//         return max;//     }
// };//双指针的方法
class Solution {
public:int maxArea(vector<int>& height) {int max=0,s=0;int l=0,r=height.size()-1;while(l<r){if(height[r]>height[l]){s=height[r]*(r-l);r--;}else{s=height[l]*(r-l);l++;}if(max<s) max=s;}return max;}
};
http://www.lryc.cn/news/141545.html

相关文章:

  • 历史最佳二季度表现后,爱奇艺想为用户提供更多价值
  • HDLBits-Verilog学习记录 | Verilog Language-Basics(2)
  • Ubuntu22.0网络/网卡丢失
  • Linux 常用
  • AWS 提示证书签名过期无法自动更新
  • Git版本管理(01) 简介 基本提交相关命令
  • 解决 vue项目报错:digital envelope routines::unsupported
  • 【Java基础增强】类加载器和反射
  • 【Java】数据类型变量
  • 护目镜佩戴检测识别算法
  • NOIOLPJ2022B. 数学游戏 分析
  • android studio gradle build running慢 卡住不动 失败 原因与解决方式
  • 如何保障Facebook账号登录稳定
  • 当前目录下的excel文件的两列内容的相似度比较
  • Cookie for Mac:隐私保护工具保护您的在线隐私
  • Huggingface训练Transformer
  • IA-YOLO项目中DIP模块的初级解读
  • MathType7.4mac最新版本数学公式编辑器安装教程
  • 为Claude的分析内容做准备:提取PDF页面内容的简易应用程序
  • js中作用域的理解?
  • 机器学习基础之《分类算法(4)—案例:预测facebook签到位置》
  • 【Java】反射 之 调用方法
  • Java——单例设计模式
  • Java实现excel表数据的批量存储(结合easyexcel插件)
  • Config:客户端连接服务器访问远程
  • 【KMP算法-代码随想录】
  • 【手写promise——基本功能、链式调用、promise.all、promise.race】
  • 计算机网络-笔记-第二章-物理层
  • 前端开发中的单伪标签清除和双伪标签清除
  • 云计算中的数据安全与隐私保护策略