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

【C++算法】5.双指针_乘最多水的容器

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:
    • 图解:


题目链接:

11.盛最多水的容器


题目描述:

39dc844edff6f605224209fa4258eb5e


解法

b6bd426171ba7fc6de727aad2fd853f0

7x7=49

解法一:暴力枚举

输入:[1,8,6,2,5,4,8,3,7]

然后1x8,1x6,1x2,1x5。。。依次类推,然后把所有得到的值比较,得到最大值。

解法二:对撞指针

v(体积)=h(高度)乘 w(宽度)

我们先取一小段来看一下规律:

7de0aaea957dc5b6d4ab951cf8e57203

比如4245。为什么呢?因为25不但高度比6小 ,而且和4的宽度也比6小。

就算里面出现高度比6大的数,但是盛水是看高度小的那一方的。也就是在高度固定的时候要看宽度。

所以我们在选完64之后,可以把64的值保存下来,然后比较65的值。


125f4eadc869675c93115b7c45dd5109

当遇到高度大于自己的,无论它多高都没用,重要的是看宽度。

所以17的乘水的容积是最大的,得到v1

可以把1舍弃,直接从8开始看了。

f9f373374858edf612ab7f8b3e7f12ca

继续重复,直到两个指针相遇,比较得到的一堆值。


C++ 算法代码:

解法一:暴力枚举(会超时)O(n2)

class Solution {
public:int maxArea(vector<int>& height) {int n = height.size();int ret = 0;// 两层 for 枚举出所有可能出现的情况for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {// 计算容积,找出最大的那一个ret = max(ret, min(height[i], height[j]) * (j - i));}}return ret;}
};

解法二:对撞指针 O(n)

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);//计算容积v = h x wret = max(ret, v);//// 移动指针if(height[left] < height[right]){//谁小移动谁left++;//左边小移动左边}else{right--;//右边小或者一样大移动右边}}return ret;}
};

图解:

数组:[1,8,6,2,5,4,8,3,7]

ccf2c37b0f65471960fc30bd5cd94955

  1. v=1x8=8,ret=8

983cd6d6846fdf4f8058aa6f39503dbc

  1. v=7x7=42,ret=49

c17779194308304f2c670384191586ad

  1. v=3x6=18,ret=49

a50cd5652a5de54f287d66fbd1da27db

  1. v=8x5=40,ret=49

7ef21e90898006660a69898b88ca6f81

  1. v=4x4=16,ret=49

35df7b2b3597d23c81f1cc10ac75081d

  1. v=5x3=15,ret=49

6f806238dc93fbec55639766adb61341

  1. v=2x2=4,ret=49

8f492ea7deb61a3484910c7978eed5ac

  1. v=6x1=6,ret=49

f7925431a2a2078edd6200e61afbcc93

  1. 跳出循环,return ret

相关文章:

  • OIDC9-OIDC集成登录功能(SpringBoot3.0)
  • 【Linux网络】详解TCP协议(3)
  • GitLab CI/CD脚本入门
  • JAVA工具类——Collections
  • AI学习指南深度学习篇-丢弃法Python实践
  • FTP访问方式详解
  • 【JVM】JVM执行流程和内存区域划分
  • 04_OpenCV图片缩放
  • element-plus中el-table固定列fixed失效问题
  • 智慧环保大数据平台建设方案
  • ASP.NET Core8.0学习笔记(十九)——EF Core DbSet
  • 论文阅读 | HiDDeN网络架构
  • 一次 Spring 扫描 @Component 注解修饰的类坑
  • 什么是数据挖掘?初学者指南
  • 基于python+django+vue的电影数据分析及可视化系统
  • Apache的80端口被占用以及访问时报错403
  • golang中接口赋值与方法集
  • IndexedDB
  • iOS编译提示和导航提示
  • miaov-React 最佳入门
  • ng6--错误信息小结(持续更新)
  • nodejs:开发并发布一个nodejs包
  • SAP云平台里Global Account和Sub Account的关系
  • spring-boot List转Page
  • vue的全局变量和全局拦截请求器
  • windows下如何用phpstorm同步测试服务器
  • 阿里云前端周刊 - 第 26 期
  • 从0到1:PostCSS 插件开发最佳实践
  • 区块链分支循环
  • 自定义函数
  • Nginx实现动静分离
  • Semaphore
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​什么是bug?bug的源头在哪里?
  • ​业务双活的数据切换思路设计(下)
  • ‌内网穿透技术‌总结
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (70min)字节暑假实习二面(已挂)
  • (arch)linux 转换文件编码格式
  • (js)循环条件满足时终止循环
  • (八)c52学习之旅-中断实验
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (一)Docker基本介绍
  • (转) ns2/nam与nam实现相关的文件
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)Google Chrome调试JS
  • **CI中自动类加载的用法总结
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 动态调用WebService + WSE + UsernameToken