您的位置:首页 > 编程语言 > Java开发

Two Sum -- LeetCode [数组类]

2014-09-18 00:52 369 查看
思路:思路很容易,这题一看就应该时间空间为O(n),所以只要过一遍数组。用哈希表维护数组的值作为key,用数组的index作为value。 遍历数组的时候,用HashMap来查看下是不是有target-numbers[i]这个值,有就可以输出了。遍历一遍找不到就输出空。

注意点:hashmap构建的时候应该是查完当前这个值没有的话就压入hashmap,这样是为了保证查的时候不会查到自身的这个值。如果数组后面有对应的value,等到遍历到那个值的时候自然会查到对应值。

误区:一开始想用夹逼的方法,后来发现返回的是index,如果排序会打乱顺序。用哈希表存这个index的话,到后面查询时,容易只查到第一个index,那样如果有重复的元素就不对了。

代码:

public int[] twoSum(int[] numbers, int target) {
int[] res = new int[2];
if (numbers == null || numbers.length < 2 )
return res;
HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();
for (int i=0;i<numbers.length;i++){
if (map.containsKey(target-numbers[i])){
res[0] = map.get(target-numbers[i]);
res[1] = i+1;
return res;
}
map.put(numbers[i], i+1);
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息