Skip to content

Commit f780316

Browse files
Merge pull request matthewsamuel95#315 from varuncoc/master
made changes
2 parents a666b94 + 8a500e9 commit f780316

File tree

2 files changed

+78
-67
lines changed

2 files changed

+78
-67
lines changed

Math/2Sum/2Sum.cpp

Lines changed: 48 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,52 @@
1-
#include<iostream>
2-
#include<vector>
3-
#include<unordered_map>
4-
5-
using namespace std;
6-
7-
8-
vector<int> twoSum(vector<int>& nums, int target) {
9-
10-
unordered_map<int,int> mp;
11-
vector<int> result;
12-
13-
for(int i=0; i < nums.size(); i++){
14-
if(mp.find(target-nums[i]) != mp.end()) {
15-
result.push_back(mp[target-nums[i]]);
16-
result.push_back(i);
17-
break;
18-
}
19-
else
20-
mp[nums[i]] = i;
21-
}
22-
return result;
1+
#include <algorithm>
2+
#include <ctime>
3+
#include <iostream>
4+
#include <random>
5+
#include <vector>
6+
7+
long long random_number()
8+
{
9+
const long long min = -100'000'000'000;
10+
const long long max = 100'000'000'000;
11+
static std::mt19937_64 gen(std::time(nullptr));
12+
static std::uniform_int_distribution<long long> dist(min, max);
13+
return dist(gen);
2314
}
2415

16+
bool is_sum_exist(const std::vector<long long>& data, long long x)
17+
{
18+
auto j = std::lower_bound(data.begin(), data.end(), x) - data.begin();
19+
decltype(j) i = 0;
20+
if(j == data.size()) --j;
21+
while (i < j) {
22+
long long sum = data[i]+data[j];
23+
if (sum == x) return true;
24+
else if (sum > x) --j;
25+
else ++i;
26+
}
27+
return false;
28+
}
2529

26-
int main() {
27-
28-
vector<int> nums;
29-
30-
nums.push_back(2);
31-
nums.push_back(7);
32-
nums.push_back(11);
33-
nums.push_back(15);
34-
35-
int target = 9;
36-
37-
vector<int> result = twoSum(nums,target);
38-
39-
cout << result[0] << " " << result[1] << endl;
40-
41-
return 0;
30+
int main()
31+
{
32+
const std::size_t data_size = 1'000'000;
33+
const std::size_t requests = 100000;
34+
std::cin.sync_with_stdio(false); //In case I need to output actual numbers
35+
36+
//creating dataset
37+
std::vector<long long> data(data_size);
38+
std::generate_n(data.begin(), data.size(), random_number);
39+
std::sort(data.begin(), data.end());
40+
41+
//creating values we will search sum of
42+
std::vector<long long> rand_values(requests);
43+
std::generate_n(rand_values.begin(), rand_values.size(), random_number);
44+
std::cout << "done" << std::endl;
45+
46+
long long counter = 0;
47+
for(auto t: rand_values) {
48+
if(is_sum_exist(data, t))
49+
++counter;
50+
}
51+
std::cout << counter;
4252
}

Math/3Sum/3Sum.cpp

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,34 @@
1-
#include <iostream>
2-
#include <algorithm>
3-
#include <unordered_map>
4-
1+
#include<algorithm>
2+
#include<vector>
53
using namespace std;
64

7-
bool find_triplet( int arr[], int arr_size, int value ) {
8-
unordered_map<int, int> map;
9-
10-
for ( int i = 0; i < arr_size; i++ )
11-
map[arr[i]] = i;
12-
13-
for ( int i = 0; i < arr_size - 1; i++ )
14-
for ( int j = i + 1; j < arr_size; j++ ) {
15-
int sum = value - ( arr[i] + arr[j] );
5+
class Solution {
6+
public:
7+
vector<vector<int> > threeSum(vector<int> &num) {
8+
vector<vector<int> > ans;
9+
if(num.size()<3) return ans;
10+
11+
sort(num.begin(), num.end());
12+
13+
for (size_t i = 0; i < num.size() - 2; i++) {
14+
if(i && num[i]==num[i-1]) continue;
1615

17-
if ( map.find( sum ) != map.end() )
18-
if ( map[sum] != i && map[sum] != j ) {
19-
cout << '(' << arr[i] << ", " << arr[j] << ", " << sum << ')' << endl;
20-
return true;
21-
}
16+
size_t a = i + 1, b = num.size() - 1;
17+
while (a < b) {
18+
if(a>i+1 && num[a]==num[a-1]) { a++; continue; }
19+
if(b<num.size()-1 && num[b]==num[b+1]) { b--; continue; }
20+
21+
int sum2 = num[a] + num[b];
22+
if (sum2 == -num[i]) {
23+
int sol[3] = { num[i], num[a], num[b] };
24+
ans.push_back(vector<int> (sol, sol + 3));
25+
a++, b--;
26+
} else if (sum2 < -num[i])
27+
a++;
28+
else if (sum2 > num[i])
29+
b--;
30+
}
2231
}
23-
return false;
24-
}
25-
26-
int main()
27-
{
28-
int arr[] = { 2, 7, 4, 0, 9, 5, 1, 3 };
29-
int arr_size = sizeof( arr ) / sizeof( arr[0] );
30-
int value = 10;
31-
32-
return find_triplet( arr, arr_size, value );
33-
}
32+
return ans;
33+
}
34+
};

0 commit comments

Comments
 (0)