-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path4Sum.cpp
More file actions
89 lines (69 loc) · 1.86 KB
/
4Sum.cpp
File metadata and controls
89 lines (69 loc) · 1.86 KB
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
#include <vector>
#include <iostream>
#include <algorithm>
#include <time.h>
#include <cassert>
using namespace std;
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> vec_ret;
if(nums.size() < 4)
return vec_ret;
sort(nums.begin(), nums.end());
for(unsigned p = 0; p != nums.size() - 3; ++p){
if(p > 0 && nums[p] == nums[p - 1])
continue;
int to_find_for_p = target - nums[p];
for(unsigned q = p + 1; q != nums.size() - 2; ++q){
if(q > p + 1 && nums[q] == nums[q -1])
continue;
int to_find_for_q = to_find_for_p - nums[q];
unsigned i = q + 1;
unsigned j = nums.size() - 1;
while(i < j){
if(nums[i] + nums[j] < to_find_for_q){
++i;
while(nums[i] == nums[i - 1] && i < j) ++i;
}
else if(nums[i] + nums[j] > to_find_for_q){
--j;
while(nums[j] == nums[j + 1] && i < j) --j;
}
else{
int nums_answer[] = {nums[p], nums[q], nums[i], nums[j]};
vector<int> vec_an_answer(nums_answer, nums_answer + sizeof(nums_answer)/sizeof(nums_answer[0]));
vec_ret.push_back(vec_an_answer);
++i;
while(nums[i] == nums[i - 1] && i < j) ++i;
--j;
while(nums[j] == nums[j + 1] && i < j) --j;
}
}
}
}
return vec_ret;
}
};
int main()
{
//int nums_1[] = {};
int nums_2[] = {0,0,0,0};
vector<int> vec_num_1;
//vector<int> vec_num_1(nums_1, nums_1 + sizeof(nums_1)/sizeof(nums_1[0]));
vector<int> vec_num_2(nums_2, nums_2 + sizeof(nums_2)/sizeof(nums_2[0]));
vector<int> vec_num_rand;
vector<vector<int>> vec_result;
Solution foo;
int ran_num;
//srand((unsigned)time(0));
srand(1);
for(auto i = 0; i < 500; i++){
ran_num = rand() % 2000 - 1000;
vec_num_rand.push_back(ran_num);
}
int test_1 = -996 + 503;
vec_result = foo.fourSum(vec_num_2, 0);
int x;
cin >> x;
}