解题思路:
哈希表
时间复杂度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)
运行结果:

本文介绍了解决“两数之和”问题的两种方法:哈希表法和双指针法。哈希表法通过构建一个哈希表来存储数组元素及其下标,实现快速查找;双指针法则适用于已排序的数组,从两端向中间逼近,时间复杂度均为O(n)。
334

被折叠的 条评论
为什么被折叠?



