-
Notifications
You must be signed in to change notification settings - Fork 69
/
Copy path058. 四数之和.java
89 lines (89 loc) · 2.83 KB
/
058. 四数之和.java
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.util.Collections;
import java.util.ArrayList;
public class Solution
{
public ArrayList<ArrayList<Integer>> fourSum(int[] numbers, int target)
{
quick_sort(numbers);
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
for(int a=0;a<numbers.length;++a)
{
for(int b=a+1;b<numbers.length;++b)
{
int c=b+1;
int d=numbers.length-1;
int target2 = target-numbers[a]-numbers[b];
while(c<d)
{
int yuan_c = numbers[c];
int yuan_d = numbers[d];
if(numbers[c]+numbers[d]==target2)
{
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(numbers[a]);
temp.add(numbers[b]);
temp.add(numbers[c]);
temp.add(numbers[d]);
result.add(temp);
++c;
--d;
while(c<numbers.length&&yuan_c==numbers[c])
++c;
while(d<numbers.length&&yuan_d==numbers[d])
--d;
}
else if(numbers[c]+numbers[d]<target2)
{
++c;
while(c<numbers.length&&yuan_c==numbers[c])
++c;
}
else
{
--d;
while(d<numbers.length&&yuan_d==numbers[d])
--d;
}
}
while((b+1)<numbers.length&&numbers[b]==numbers[b+1])
++b;
}
while((a+1)<numbers.length&&numbers[a]==numbers[a+1])
++a;
}
return result;
}
public void quick_sort(int[] numbers)
{
quick_sort(numbers,0,numbers.length-1);
}
public void quick_sort(int[] numbers,int start,int end)
{
if(start>=end)
return;
int mid = select(numbers,start,end);
quick_sort(numbers,start,mid-1);
quick_sort(numbers,mid+1,end);
}
public int select(int[] numbers,int start,int end)
{
int ji_zhun = numbers[end];
int index = start-1;
int temp;
for(int i=start;i<end;++i)
{
if(numbers[i]<ji_zhun)
{
++index;
temp = numbers[index];
numbers[index] = numbers[i];
numbers[i] = temp;
}
}
++index;
temp = numbers[index];
numbers[index] = numbers[end];
numbers[end] = temp;
return index;
}
}