Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
/**
* 暴力破解法
* @param arr
* @param target
* @return
*/
public static int[] TwoSum1(int[] arr,int target)
{
for(int i = 0; i < arr.length;i++)
{
int temp = target - arr[i];
for(int j=i+1; j < arr.length; j++)
{
if(temp == arr[j])
{
return new int[]{i,j};
}
}
}
return null;
}
/**
* 利用map先将数组中的值放入
* @param arr
* @param target
* @return
*/
public static int[] TwoSum2(int[] arr, int target)
{
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0 ; i < arr.length; i++)
{
map.put(arr[i],i);
}
for(int j = 0; j < arr.length; j++)
{
int temp = target-arr[j];
if(map.containsKey(temp)) {
return new int[]{j, map.get(temp)};
}
}
return null;
}
/**
* 先不把arr中的元素放入map,逆向思维
* @param arr
* @param target
* @return
*/
public static int[] TwoSum3(int[] arr,int target)
{
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0; i < arr.length;i++)
{
int temp = target -arr[i];
if(map.containsKey(temp))
{
return new int[]{map.get(temp),i};
}
map.put(arr[i],i);
}
return null;
}