关于Two Sum问题中数据重复的问题

来源:4-4 使用查找表的经典问题 Two Sum

ChlZhYa

2018-03-03

老师在课程中说。如果直接把数组中所有的元素放进 map 中。当数组中出现重复元素时,会覆盖索引值,出现问题。但是我研究了一下。

http://img.mukewang.com/szimg/5a9983ce00014e0505110413.jpg

按照这种方式编码。如果出现重复,假设数组为{42,42}时,(42,1)这个键值对会覆盖(42,0)这个键值对,所以一个数字在map中对应的索引,是这个数字在数组中最后出现的位置。

而当我们第二次遍历map时,是从头开始遍历的。当第一个42出现时,我们判断map.get(84 - 42)时,正好得到的是第二个42的索引。当前的 i 是第一个42的索引。所以得到的两个索引不会出现重复的情况。是可以得到正确的解的。

表达不是很清晰。。不知道老师能不能看懂。。

写回答

3回答

liuyubobobo

2018-03-03

能看懂!大赞!你说的对!


由于这个题目保证输入数据有解且只有唯一解,找到这个解就好了,你说的逻辑是完全没问题的。我在课程的官方github上添加了你的代码和解决思路,链接在这里:


C++:

https://github.com/liuyubobobo/Play-with-Algorithm-Interview/blob/master/04-Using-Hash-Table/Course%20Code%20(C%2B%2B)/04-Two-Sum/main2.cpp


Java:

https://github.com/liuyubobobo/Play-with-Algorithm-Interview/blob/master/04-Using-Hash-Table/Course%20Code%20(Java)/04-Two-Sum/src/Solution2.java


感谢分享!


如果愿意可以加我的微信:liuyubobobo。我会给你发一个小红包:)

1
1
ChlZhYa
很高兴得到老师的认可。
2018-03-03
共1条回复

weixin_慕标9554468

2020-06-21

可惜没有给问题的点赞按钮

0
0

慕工程4033812

2019-05-30

赞!!!!

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程