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.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
一开始的解法是两重循环一一比较,成功AC。
解法一:
public class Solution {
public int[] twoSum(int[] nums, int target) {
if (nums==null)
return null;
int[] records=new int[2];
for(int i=0;i<nums.length;i++)
{
for(int j=0;j<i;j++)
{
if(nums[i]+nums[j]==target)
{
records[0]=j;
records[1]=i;
return records;
}
}
}
return null;
}
}
这算是最简单的方法了,时间复杂度为O(n^n)。考虑实现一层循环的方法,那么考虑容器的使用,考虑依次把数组的值放进去,然后使用target-nums[i],是否在这个容器中,若存在就可以返回一个位置数组,所以容器考虑使用map;
解法二:
public class Solution {
public int[] twoSum(int[] nums, int target) {
if (nums==null)
return null;
int[] records=new int[2];
Map<Integer,Integer> numbers=new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++)
{
Integer num=numbers.get(nums[i]);
if(num==null) numbers.put(nums[i],i);
Integer n=numbers.get(target-nums[i]);
if(n!=null&&n<i)
{
records[0]=n;
records[1]=i;
return records;
}
}
return null;
}
}