解题思路:
哈希表
时间复杂度O(n)
提交代码:
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] res=new int[2];
if(numbers==null||numbers.length<2) return res;
Map<Integer,Integer> map=new HashMap<>();
int p=0,len=numbers.length;
while(p<len) {
if(map.containsKey(target-numbers[p])) {
res[0]=map.get(target-numbers[p])+1;
res[1]=p+1;
return res;
}
map.put(numbers[p], p);
p++;
}
return res;
}
}
运行结果:
讨论区有一种双指针的做法:
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] res=new int[2];
if(numbers==null||numbers.length<2) return res;
int p1=0,p2=numbers.length-1;
int tmp=numbers[p1]+numbers[p2];
while(p1<=p2) {
if(tmp==target) {
res[0]=p1+1;
res[1]=p2+1;
return res;
}else if(tmp<target) {
p1++;
}
else {
p2--;
}
tmp=numbers[p1]+numbers[p2];
}
return res;
}
}
时间复杂度:O(n)
运行结果: