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

 

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

        这里就要提到我们的哈希表法: 我们可以使用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 

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

相关推荐

  1. leetcode之和

    2024-06-19 07:38:03       11 阅读
  2. Python算法集_之和

    2024-06-19 07:38:03       30 阅读
  3. 算法1之和

    2024-06-19 07:38:03       14 阅读
  4. LeetCode算法之和

    2024-06-19 07:38:03       10 阅读
  5. 力扣笔记(1)之和(C++)

    2024-06-19 07:38:03       11 阅读
  6. 算法小白力扣 1 - 之和

    2024-06-19 07:38:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-19 07:38:03       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-19 07:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-19 07:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-19 07:38:03       18 阅读

热门阅读

  1. CSS选择器

    2024-06-19 07:38:03       8 阅读
  2. lspci总结

    2024-06-19 07:38:03       5 阅读
  3. 实现ROS中两个里程计数据的转换到同一坐标系下

    2024-06-19 07:38:03       8 阅读
  4. 基础语法总结 —— Python篇

    2024-06-19 07:38:03       5 阅读
  5. Lua迭代器详解(附加红点功能实例)

    2024-06-19 07:38:03       5 阅读
  6. 【C++11】initializer_list详解!

    2024-06-19 07:38:03       6 阅读
  7. QT day4

    QT day4

    2024-06-19 07:38:03      5 阅读
  8. 百度网盘提速攻略:解决限速问题的实用方法

    2024-06-19 07:38:03       8 阅读
  9. vue项目cnpm i 报错

    2024-06-19 07:38:03       5 阅读
  10. 基于springboot的美食推荐商城源码数据库

    2024-06-19 07:38:03       6 阅读
  11. 【HarmonyOS NEXT 】鸿蒙generateBarcode (码图生成)

    2024-06-19 07:38:03       5 阅读
  12. 界面美观的测试报告

    2024-06-19 07:38:03       5 阅读
  13. JWT详解、JWTUtil工具类的构建方法

    2024-06-19 07:38:03       7 阅读