一、题目
二、解决方法
1、自己的代码
/*
* 1、将数组放在HashMap中
* 2、给数组排序
* 3、通过从2个指针从头、尾向中间移动,得到2个值
* 4、将2个值在HashMap中找出它们的位置
*/
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int i = 1;
for (int n : nums){
map.put(n, i++);
}
Arrays.sort(nums);
int index1 = 0;
int index2 = nums.length -1;
int num = 0;
while (index1 < index2){
num = nums[index1] + nums[index2];
if (num < target){
index1 ++;
} else if (num > target){
index2 --;
} else {
break;
}
}
if (index1 < index2){
return new int[]{map.get(nums[index1]), map.get(nums[index2])};
}
return new int[]{};
}
当出现相同元素时,因为值作为Map中的key,所以无法得到正确结果
2、O(n)的解决方案
public int[] twoSum(int[] nums, int target) {
int[] results = new int[2];
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i=0; i<nums.length; i++){
Integer num = map.get(nums[i]);
if (num == null){
map.put(nums[i], i);
}
num = map.get(target - nums[i]);
if (num!=null && num<i){
results[0] = num + 1;
results[1] = i + 1;
return results;
}
}
return results;
}