数组两个元素相加等于目标值,返回这两个元素的下标
第一种方法,就直接循环判断的,时间复杂度为(n^2)
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 tmp=nums[i]+nums[j];
if(target==tmp)
{
result[0]=i;
result[1]=j;
}
else{
continue;
}
}
}
return result;
}
第二种方法:采用hashmap键值对,时间复杂度为o(n)
public static int[] twoSum2(int[] nums, int target){
Map<Integer,Integer>map=new HashMap<>();
for(int i=0;i<nums.length;i++)
{
map.put(nums[i],i);
}
for(int i=0;i<nums.length;i++){
int tmp=target-nums[i];
if(map.containsKey(tmp) && map.get(tmp)!=i)
{
return new int[]{i,map.get(tmp)};
}
}
throw new IllegalArgumentException("No two sum solution");
}
有点奇怪的,不晓得是不是网络的原因,我第一种方法o(n^2)的运行时间比第二种o(n)少一半