问题:
给定一个整数数组,返回两个数字的索引,使它们相加到特定目标。
您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。
事例:
给定nums = [2,7,11,15],target = 9,
因为nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9,
返回[ 0,1 ]。
原本的解决方案
/**
* Me
* @param nums
* @param target
* @return
*/
public static int[] twoSum(int[] nums, int target) {
int [] result = new int[2];
for(int i =0 ; i < nums.length ; i ++){
for(int j = i+1 ; j< nums.length ; j ++){
int sum = nums[i] + nums[j] ;
if(target == sum){
result[0] = i ;
result[1] = j ;
return result;
}
}
}
return result;
}
//测试
public static void main(String[] args) {
int[] nums = {1,3,5,6,7,8,11,15};
twoSumNew(nums, 6);
int[] twoSum = twoSum(nums, 6);
System.out.println(Arrays.toString(twoSum));
}
新的解决方案
/**
* Other
* @param nums
* @param target
* @return
*/
public static int[] twoSumNew(int[] nums, int target) {
int [] result = new int[2];
Map<Integer,Integer> map = new HashMap<Integer , Integer>();
for(int i =0 ; i < nums.length ; i ++){
if(map.containsKey(target - nums[i])){
result[1] = i ;
result[0] = map.get(target - nums[i]) ;
return result;
}
map.put(nums[i], i);
}
return result;
}
//测试
public static void main(String[] args) {
int[] nums = {1,3,5,6,7,8,11,15};
int[] twoSum = twoSumNew(nums, 6);
System.out.println(Arrays.toString(twoSum));
}
输出结果:
[0, 2]