两数之和

暴力

双层循环 两两相加 等于目标值 返回 即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {

public int[] twoSum(int[] nums, int target) {

for(int i=0;i<nums.length;i++){

for(int j=0;j<nums.length;j++){

if(nums[i]+nums[j]==target && i!=j){

int[] a={
i,j};
return a;
}
}
}
return null;
}
}

map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {

public int[] twoSum(int[] nums, int target) {

HashMap<Integer,Integer> map=new HashMap();
int[] res=new int[2];
for(int i=0;i<nums.length;i++){

int a=target-nums[i];
if(map.get(a)==null){

map.put(nums[i],i);
}else{

res[0]=i;
res[1]=map.get(a);
}
}
return res;
}
}

快慢指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Solution {

public int[] twoSum(int[] nums, int target) {

//快速排序 O(nlogn)
int[] copy=new int[nums.length];
for(int t=0;t<nums.length;t++){

copy[t]=nums[t];
}
Arrays.sort(nums);
int[] res=new int[2];
//快慢指针
int j=nums.length-1;
int i=0;
while(i<nums.length){

if(i==j)
{

return null;
}
if(nums[i]+nums[j]<target){

i++;
}else if(nums[i]+nums[j]>target){

j--;
}else{

res[0]=i;
res[1]=j;
break;
}
}
if(res[0]!=0||res[1]!=0){

Boolean m=true;
Boolean q=true;
for(int k=0;k<nums.length;k++){

if(copy[k]==nums[res[0]]&& m)
{

res[0]=k;
m=false;
}else if(copy[k]==nums[res[1]] && q)
{

res[1]=k;
q=false;
}
}
}
return res;
}
}

作者声明

1
如有问题,欢迎指正!