当前位置: 首页 > 后端技术 > Python

【LeetCode刷题系列】1.两数之和

时间:2023-03-26 17:26:39 Python

1.题目描述给定一个整数数组nums和一个目标值target,请在数组中找到和为目标值的两个整数,并返回它们的数组下标。可以假设每个输入只有一个答案。但是,您不能在此数组中重复使用相同的元素。示例:给定nums=[2,7,11,15],target=9**因为nums[0]+nums[1]=2+7=9**所以返回[0,1]**2。题目分析Ⅰ.暴力破解暴力破解的思路其实很简单。它遍历数组中的每一个元素,查找数组中是否还有另一个元素,并使两个元素之和等于target的值。显然,该算法需要两层循环,时间复杂度为O(n^2)。最重要的是数组支持根据下标随机访问数据,所以哈希表实际上是数组的扩展,是从数组演化而来的。哈希表具有数组的随机读取特性,读取一个元素的时间复杂度通常为O(1)。如果我们考虑一个一维数组,为了在数组中找到一个元素,可以遍历整个Array,比如线性搜索(和二分查找),但是对于一个元素很多的数组,如果运气不好,它会花很多时间。现在假设你要读取数组中的一个元素,而你只要知道它的下标值(索引),就可以快速找到你要查询的元素。因此,如果知道数组中每个元素的索引值,找到它所需的时间复杂度与数组的大小和元素的位置无关。但是你怎么知道索引值中的哪个元素是你要查找的呢?哈希表提供了这样一种方法,它在每个索引值和它所在的元素之间建立一定的对应关系。也就是说,如果你要找一个元素,你可以通过一些计算得到它的索引值,然后通过索引值找到它。继续上面的例子,如果我们将多个名字连续存储在数组中。我们可以用ASCII码表示名字的每一个字母,然后相加,因为我们现在数组中有11个元素,所以我们取每个字母ASCII码的余数和元素个数作为我们要放入的元素进入位置。这种将元素映射到数组下标的方法称为哈希函数。这样,我们就建立了每个名字和它的索引值之间的关系。这时候如果我们要找一个元素,就可以通过我们的哈希函数得到它的索引值,然后就可以进行随机访问了。回到我们的问题,因为题目最后要求我们返回的值是元素的下标。如果我们想知道一个元素的下标,最基本的方法就是遍历数组,直到找到一个索引值,其对应的元素就是我们的目标。如果使用哈希表,我们希望返回值是元素的下标。同时,由于数组中的元素都是整数,为了方便,我们可以直接将元素值作为哈希表的索引值,哈希表中的每个索引值对应于该元素的下标。所以我们可以遍历每一个元素,从target中减去该元素,得到我们需要找的target值。如果元素存在于哈希表中,我们可以直接返回当前数组索引值对应的索引值和哈希表中的目标值。使用该算法,所需时间复杂度为O(n)3.手绘解释4.代码实现#include#include#includeusingnamespacestd;vectortwoSum(vector&,int);intmain(){vectornums={0,1,4,5,8,10};矢量ans=twoSum(nums,13);for(autox:ans)cout<twoSum(vector&nums,inttarget){unordered_maphash;对于(inti=0;itwoSum(vector&numbers,inttarget){//键是数字,值是它在向量中的索引。unordered_map散列;向量<整数>结果;for(inti=0;imap=newHashMap();for(inti=0;i