像这类题,我们常常会先想到穷举法,但是这道题穷举法最大的问题就是重复扫描元素。 为了降低时间复杂度,我们可以借助数组或者集合等工具来存储已经扫描过的元素。 这道题由于需要返回数组下标,所以我们要同时存储元素以及下标,因此我们采用集合来存储。
class Solution {
public int[] twoSum(int[] nums, int target) {
int k,le,x,p;
int[] num=new int[2];
if(target%2==0){
x=target/2;
p=0;
for(int i=0;i<nums.length;i++){
if(nums[i]==x){
num[p]=i;
p=1;
}
}
}
HashSet<Integer> hs = new HashSet<>();
for(int i=0;i<nums.length;i++){
hs.add(nums[i]);
}
le = hs.size();
for(int j=0;j<nums.length;j++){
k=target-nums[j];
hs.remove(k);
if(k*2==target){
hs.add(k);
}
if(hs.size()!=le){
num[0]=j;
for(int l =0;l<nums.length;l++){
if(nums[l]==k)
num[1]=l;
}
break;
}
}
return num;
}
}