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

C++ 优先算法——盛最多水的容器(双指针)

目录

题目:盛最多水的容器 

1. 题目解析

2. 算法原理

3. 代码实现


题目:盛最多水的容器 

1. 题目解析

题目截图:

如图所示:

水的高度一定是由较低的那条线的高度决定的:例1图中,是由7决定的,然后求出8和7它们对应的下标的之间的差,再进行相乘就得出体积。

题目的意思就是要我们找出一个数组中,两个下标对应的值,取它较小的那个值,并与两个下标之差的乘积,找出这个最大的乘积。

我们挑一组验证一下,题目给的结果是不是最大的

2. 算法原理

这道题有两种解法:

  1. 暴力枚举
  2. 利用单调性,使用双指针解决问题

这里解决用第二种方法,下来对这个方法进行解释

 

这样看出,取出的小部分向内 永远都是比第一次的v小,所以我们得出:当选区间最左、最右两个数,算出来一个容器之后,如果拿这个比较小的数向内枚举的话,发现容器是一直减小的,因此上述取的小部分对于4就不用考虑了。所以可以把这个单调性规律推广到整个数组。

然后算出来V1,发现1是较小的,然后就直接让left向后移动,不用再考虑1的向内枚举了

 

 

然后重复上面操作进行下去,直到两指针相遇。

 我们可以总结一下:

  • 向内枚举,w是肯定下降的。(w就是两个下标的差)。
  • 若以两条垂线较低的那条向内枚举,那么h的变化情况:下降或不变。所以导致V是一直小于当前最大的V的,所以可以不用考虑。
  • 所以谁指向的数较小,谁移动(指针向内移动)。
  • 移动完后,继续算出一个容器V。
  • 更新max。
  • 再接着移动指针,重复上面操作。
  • 指针相遇就结束。

 

所以这里用的还是双指针的方法,左右指针,向内移动,一起遍历整个数组,所以这个算法的时间复杂度是O(N)。

按照上述的逻辑,我们下面实现代码。

3. 代码实现

题目跳转:盛最多水的容器

//这里就是用的上面介绍的双指针法
class Solution {
public:int maxArea(vector<int>& height) {int left = 0, right = height.size() - 1, ret = 0;while (left < right) {//用最小的那个当高,并与它们之间相减得出的距离结果相乘int V = min(height[left], height[right]) * (right - left);//每次都更新一下最大的体积ret = max(ret, V);// 移动指针 谁对应的值小谁移动// 注意left与right的移动方向if (height[left] < height[right]) {++left;} else {--right;}}return ret;}
};

提交结果:

制作不易,若有不足之处或出问题的地方,请各位大佬多多指教 ,感谢大家的阅读支持!!!   

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

相关文章:

  • blender 小车建模 建模 学习笔记
  • 导出列表数据到Excel并下载
  • 基于NVIDIA NIM平台实现盲人过马路的demo(一)
  • 美格智能5G车规级通信模组:以连接+算力驱动智能化进阶
  • [MRCTF2020]PYWebsite1
  • 无源元器件-磁珠选型参数总结
  • 宝顶白芽,慢生活的味觉盛宴
  • 已知三角形三边长求面积用仓颉语言作答
  • 【JavaScript】匿名函数及回调函数总结
  • HTML鼠标移动的波浪线动画——页面将会初始化一个Canvas元素,并使用JavaScript代码在Canvas上绘制响应鼠标移动的波浪线动画
  • 树莓派开发相关知识八-其他传感器
  • ComfyUI - ComfyUI 工作流中集成 SAM2 + GroundingDINO 处理图像与视频 教程
  • STM32G4 双ADC模式之常规同步模式独立注入模式
  • 深入理解网络协议:OSPF、VLAN、NAT与ACL详解
  • idea 配置tomcat 服务
  • .net core 接口,动态接收各类型请求的参数
  • 关注!这些型号SSD有Windows蓝屏问题需要修复
  • go语言gin框架平滑关闭——思悟项目技术2
  • K8S flannel网络模式对比
  • Vue前端框架:Vue前端项目文件目录
  • git回滚到指定的提交
  • 手机怎么玩森林之子?远程玩森林之子教程
  • 深度学习之网络与计算
  • 《JVM第1课》Java 跨平台原理
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30
  • 加强版 第五节图像处理与视频分析
  • Orleans8.2入门测试
  • 【Linux 25】网络套接字 socket 概念
  • python openai 通过Function Call 创建自动化任务
  • 设计模式之责任链的通用实践思考