Leetcode 两数之和

Leetcode刷题笔记

小白一个,零基础,想通过这种方式记录自己的leetcode刷题之路。
看看能坚持到什么时候吧。hhhhh。

Day1 两数之和

先从最简单的开始吧,这是leetcode的第一题。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
思路一:暴力遍历,将target减去nums数组中第一个元素,将结果result遍历nums数组,如果有这个值,返回两个元素的下标。如果没有,target会去减第二个元素。直到循环结束。如果都没有找到,最后会返回[0,0],由于元素不可以重复利用,所以不用担心出现找到的情况是 [0,0]的这一情况。(由于leetcode说明一定有解,所以[0,0]这种情况是不可能发生的 hhhh)
在这里插入图片描述
思路写在上面了 所以代码就没有注释了(好像是个不好的习惯)
这种方法的缺点也很明显,就是for里面嵌套一层for 所以时间复杂度是O(n2)(平方的意思,我不知道怎么打 = =),有一说一,刚开始想出这种方法还很激动。
在这里插入图片描述
什么,这种方法运行时间居然是0ms?连续跑了几次还是这样。。。

思路二:用HashMap来实现,键是数组中的值,value是数组的索引。第一步是同思路一一样,我们去遍历数组nums,用目标值target-nums[i]得到result,如果哈希表中没有这个result这个键,我们就把num[i]和对应的索引加入hashmap中,如果result存在哈希表中,我们就返回索引值i以及这个result键所对应的value。最后时间复杂度是O(n)。这个方法是看评论区大佬学来的(淦!什么时候我有这么强就好了,明明基础阶段也学了HashMap,怎么没想到用呢。方法是自己理解后用自己的语言说的)
在这里插入图片描述
这里有个自己写这种方法的时候遇到的问题吧。
哈希碰撞的问题
这个问题我也想过,万一有俩一样的key存进去不就更新了value吗,后来我想想了,如果这两个key相等的话,要么相加等于target,要么不等。如果相等的话,一个其实是还在nums数组里,另一个在Hash表中,这时候分别返回一个数组的索引以及key对应的value即可。如果不等于target,更新key的value也没事。比如[2,2,4],6。无论返回哪个2都是对的。
这个方法只有一个for循环,所以时间复杂度是O(n)。
在这里插入图片描述
看起来两个方法好像差不多 = =,其实还是差很多的哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值