欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > [算法刷题积累] 两数之和以及进阶引用

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

2024/10/24 2:00:30 来源:https://blog.csdn.net/2301_80146255/article/details/139768037  浏览:    关键词:[算法刷题积累] 两数之和以及进阶引用

 

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

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com