题目
题目的意思是在一个整形数组中查找连个数字,使其和等于给定的目标。并返回给出这两个数出现的位置。
分析
初读题目会想到直接使用两层遍历的办法,但是一到两层遍历就会时间复杂度增加。其实可以考虑使用映射的方法,将映射的键设置为值,将映射的值设置为该值在映射中出现的位置。这样做的目的在于映射的查找时间为常数,查找到数的位置相当快,具体的逻辑见代码。
代码
下面的代码表示使用双层循环得到的答案。
public int[] twoSum(int[] nums, int target)
{
int arraySize=nums.length;
for(int i=0;i<arraySize;i++)
{
for(int j=i+1;j<arraySize;j++)
{
if(nums[i]+nums[j]==target)
{
int[] result={i,j};
return result;
}
}
}
return null;
}
下面的代码表示使用映射结构实现的代码。
public int[] twoSum(int[] nums, int target)
{
int arraySize=nums.length;
HashMap<Integer,Integer> map=new HashMap<Integer, Integer>();
for(int i=0;i<arraySize;i++)
{
if(map.containsKey(target-nums[i]))//判断是否包含key
{
int[] result={map.get(target-nums[i]),i};
return result;
}
else
{
map.put(nums[i],i);
}
}
return null;
}