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

【算法专题突破】双指针 - 盛最多水的容器(4)

目录

1. 题目解析

2. 算法原理

3. 代码编写

写在最后:


1. 题目解析

题目链接:11. 盛最多水的容器 - 力扣(Leetcode) 

 这道题目也不难理解,

两边的柱子的盛水量是根据短的那边的柱子决定的,

而盛水量就是短的柱子的高度 * 宽度即可。

2. 算法原理

 这道题可以用暴力枚举,两层for循环,肯定是可以找到最大的盛水量,

但是作为一道中等题,用暴力会超时,所以我们得想一个更好的解法。

 我们来观察一下规律:

以这个图为例;

如果我们让比较高的左边往右遍历,会有两种情况:

1. 如果右边的柱子更高,而宽度变小,盛水量减少,

2. 如果右边的柱子更矮,宽度又变小,盛水量减少。

很明显不太行,

那如果我们让比较矮的右边往左遍历,也会有两种情况:

1. 如果左边的柱子更高,宽度变小,盛水量可能变小,可能不变,可能变大,

2. 如果左边的柱子更矮,宽度变小,盛水量减少。

从上面两种情况来看,我们可以通过不断让矮的一边的柱子往中间遍历,

记录每次出现的最大值,当遍历完之后,我们就能得到最大值了,

而我们只遍历了一遍,所以时间复杂度就优化到了O(N),

具体做法就是使用双指针来维护两边。 

3. 代码编写

class Solution {
public:int maxArea(vector<int>& height) {int left = 0, right = height.size() - 1, maxVal = 0;while(left < right) {maxVal = max(maxVal, min(height[left], height[right]) * (right - left));if(height[left] < height[right]) left++;else right--;}return maxVal;}
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

http://www.lryc.cn/news/143962.html

相关文章:

  • 循环神经网络(RNN) | 项目还不成熟 |还在初级阶段
  • 【Spring Boot】数据库持久层框架MyBatis — MyBatis简介
  • K8S Nginx Ingress实现金丝雀发布
  • 【C++入门】new和delete(C/C++内存管理)
  • C++设计模式之桥接模式
  • 前端速查速记系列----评论列表
  • hiredis的安装与使用
  • 【InsCode】InsCode打造的JavaSE与Linux命令互融的伪Linux文件系统小项目
  • “深入解析JVM:探索Java虚拟机的内部机制“
  • 内网远程控制总结
  • Excel显示此值与此单元格定义的数据验证限制不匹配怎么办?
  • mysql(八)事务隔离级别及加锁流程详解
  • 华为云Stack的学习(二)
  • 好用的网页制作工具就是这6个,快点来看!
  • 一文讲通物联网嵌入式
  • Unity3D Pico VR 手势识别 二
  • ubuntu中使用iptables限制端口
  • Orchestrator介绍二 自身高可用性方案
  • 成集云 | 旺店通多包裹数据同步钉钉 | 解决方案
  • 什么是字体图标(Icon Font)?如何在网页中使用字体图标?
  • Blender文件云端GPU渲染
  • C++——引用
  • Flask入门一 ——虚拟环境及Flask安装
  • 接口测试json入参,不同类型参数格式书写
  • go web框架 gin-gonic源码解读03————middleware
  • win10电脑记事本在哪里?电脑记事本如何查看字数?
  • 【微服务】06-安全问题
  • js的this指向问题
  • Redis常用数据类型及命令
  • 软件工程(六) 面向对象分析(OOA)之UML图特点