lt-1 —-two sum

我的解法:
public class Solution {
public int[] twoSum(int[] numbers, int target) {
HashMap hm=new HashMap();
for(int i=0;i<numbers.length;i++){

if(hm.get(target-numbers[i])!=null){
int r2 = (Integer) hm.get(target-numbers[i]);

return new int[]{r2,i+1};
}else{

hm.put(numbers[i], i+1);
}

}

return new int[]{-1,-1};
}
}

note:用了hashmap,做快查。
这个题有几个坑儿:
1.最直接的解法就是嵌套循环,时间复杂度问题,会报TLE。犯了这个错后,仔细思考,只能做一次循环。那就需要有个临时存储的敌方—>hashmap,边存边计算。

2.返回的index,第一个比第二个小。 所以需要注意hashmap.get(target-numbers[i])是第一个,而i+1才是第二个index

3.input中的数组中,如果有两个相等的数字,那么怎么返,其实题目中并没有要求这种情况下,一定要返第一个index,只要求 返的两个index,第二个一定得比第一个小。开始做了多余的剔除判断,反而在[0,4,3,0],0的输入下,出错。