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

[算法刷题积累] 两数之和以及进阶引用

 

两数之和很经典,通常对于首先想到的就是暴力的求解,当然这没有问题,但是我们如果想要追求更优秀算法,就需要去实现更加简便的复杂度。

        这里就要提到我们的哈希表法: 我们可以使用unordered_map去实现,也可以根据题目,用数组去模拟哈希表,两种方式选择合适的就好。

        哈希表通过记录来某一键值是否存在,如果存在则可进一步访问pair中的second类型变量,通过这一系列的组合,就可以用哈希表简化大部分问题。

        如本道题,二数之和,就是找寻数组中两个和为target的数,并且返回其下标。

        那么数据的值就key,对应的下标就是value。而且题目有要求:你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现,所以我们要先去寻找hash表中键值 target-nums[i]是否存在,存在就说明再nums[i]之前,就有与nums[i]和为target的值出现,所以返回 键值对应的Value(下标)和当前的i即可。   如果没有,则将当前的key(数据的值)添加并且记录其对应的下标。

、变式应用:

  •  此道题目,同样很容易想到暴力的解法,但是对于数据庞大的此道题会出现超时的结果。所以我们就要去优化算法结构,正好此题目与两个数据之间的关系有关的,所以很容易想到两数之和的哈希表解法。
  • 题目不再是返回满足条件的下标组合,而是输出满足条件下标的对数。所以这里的key键值和value的意义也要对应修改:key指代出现的数据对24取模后的值,value代表数据对24取模之后出现key的次数。
  • 举例比如:23出现,对24取模操作,得到23,那么hash[23]++(hash[23]的值代表出现次数)。
  • 所以对于两个数有必须要有关系:     ( X + Y )%24 == 0

所以就有下面的关系:

        

最后得到关系:   x%24 = (24-y%24)%24

利用这个关系式子,可以找到能与当前数据匹配之后能被24整除的数据对的个数。

具体操作:

1.寻找与当前数据满足条件的数据是否存在,如果存在,则统计次数。

2.如果没有,则将当前数据与24的取模作为key键值取更新value的值。(第一步和第二步一定不能反,如果倒过来,就不满足题目  i < j 

遍历一次整个数组,就可以统计出所有的对数即可。

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

相关文章:

  • pytest+parametrize+yaml实例
  • 【HarmonyOS】鸿蒙应用模块化实现
  • 深入Node.js:实现网易云音乐数据自动化抓取
  • 【Docker实战】jenkins卡在编译Dockerfile的问题
  • rust 多线程分发数据
  • CentOS 7x 使用Docker 安装oracle11g完整方法
  • DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)
  • Shellcode详解
  • sherpa-onnx说话人识别+语音识别自动开启(VAD)+语音识别Python API
  • 提取人脸——OpenCV
  • python数据可视化:在图形中添加注释matplotlib.pyplot.annotate()
  • IDEA debug 调试Evaluate Expression应用
  • 04-echarts-立体柱状图扩展
  • HTML5 Web Workers: 异步编程的强大力量
  • Flutter第十二弹 Flutter多平台运行
  • 30天学会QT---------------大项目之在线考试系统
  • 搜维尔科技:力反馈主手—手术机器人应用〈腔镜手术机器人平台—进入手术室动物实验〉
  • 缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)
  • 初识es(elasticsearch)
  • AI在线免费视频工具2:视频配声音
  • Kafka 如何保证消息顺序及其实现示例
  • 内存分配器性能优化
  • 《OKR工作法》读书笔记
  • 2025年计算机毕业设计题目参考-简单容易
  • 3.8. 马氏链-一般状态空间的马氏链(Harris链)
  • Python8 使用结巴(jieba)分词并展示词云
  • python中scrapy
  • 基础语法总结 —— Python篇
  • 数据库系统概述选择简答概念复习
  • template标签