题意是给出一串数字以及一个target(保证有一解)
找出满足两数之和等于target的两个数的下标(下标从1开始)
一个简单的想法就是直接暴力,时间复杂度O(n*n),超时
然后可以想到对这串数字排序,排序后从两边向中间找
但是有一个很棘手的问题就是这串数字中一对相同的数是答案,比如[0,3,4,0];target=0此时答案应该是1, 4;找出这对答案要保证不重复找某个数(如输出1, 1或4, 4)
我的方法是先找到一个数后,在排除这个数后的数字串里寻找另一个数。
代码如下:
|
|
看答案讨论区有一个很好的想法,就是hash处理
对当前的nums[i],用map保存<target-nums[i], i+1>
那么每遇到一个nums[i]的时候,就可以考察map[nums[i]]是否为0,不为0说明在之前已经出现过target-nums[i],则输出<map[nums[i]], i+1>即可
想发很巧妙,但因为使用了map,导致效率不如第一份代码效率高
|
|
