Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1fd508d

Browse files
马力马力
马力
authored and
马力
committed
Add C++ implementation
Signed-off-by: 马力 <mali0921@HPCL202007007deMacBook-Pro.local>
1 parent 0879d90 commit 1fd508d

File tree

3 files changed

+68
-5
lines changed

3 files changed

+68
-5
lines changed

‎164_maximum_gap/max_gap.cc‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
class Solution {
6+
public:
7+
int maximumGap(vector<int>& nums) {
8+
if (nums.size() < 2) {
9+
return 0;
10+
}
11+
12+
int min_elem = *min_element(nums.begin(), nums.end());
13+
int max_elem = *max_element(nums.begin(), nums.end());
14+
double bucket_size = 1.0 * (max_elem - min_elem) / (nums.size() - 1);
15+
if (bucket_size == 0) {
16+
return 0;
17+
}
18+
19+
int bucket_cnt = (max_elem - min_elem) / bucket_size + 1;
20+
vector<int> min_bucket(bucket_cnt, INT_MAX);
21+
vector<int> max_bucket(bucket_cnt, INT_MIN);
22+
for (int i = 0; i < nums.size(); i++) {
23+
int id = (nums[i] - min_elem) / bucket_size;
24+
min_bucket[id] = min(nums[i], min_bucket[id]);
25+
max_bucket[id] = max(nums[i], max_bucket[id]);
26+
}
27+
28+
int max_gap = 0;
29+
int last_max = max_bucket[0];
30+
for (int i = 1; i < bucket_cnt; i++) {
31+
if (min_bucket[i] != INT_MAX) {
32+
max_gap = max(min_bucket[i] - last_max, max_gap);
33+
last_max = max_bucket[i];
34+
}
35+
}
36+
return max_gap;
37+
}
38+
};

‎167_two_sum_ii/two_sum.c‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ static int* twoSum(int* numbers, int numbersSize, int target, int* returnSize)
99
{
1010
int i = 0, j = numbersSize - 1;
1111
while (i < j) {
12-
int diff = target - numbers[i];
13-
if (diff <numbers[j]) {
14-
while (i<--j&&numbers[j+1] ==numbers[j]) {}
15-
} else if (diff >numbers[j]) {
16-
while (++i<j&&numbers[i-1] ==numbers[i]) {}
12+
int diff = target - numbers[i]-numbers[j];
13+
if (diff >0) {
14+
i++;
15+
} else if (diff <0) {
16+
j--;
1717
} else {
1818
*returnSize = 2;
1919
int *indexes = malloc(*returnSize * sizeof(int));

‎167_two_sum_ii/two_sum.cc‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
class Solution {
6+
public:
7+
vector<int> twoSum(vector<int>& numbers, int target) {
8+
vector<int> res;
9+
int i = 0;
10+
int j = numbers.size() - 1;
11+
while (i < j) {
12+
int diff = target - numbers[i] - numbers[j];
13+
if (diff > 0) {
14+
i++;
15+
} else if (diff < 0) {
16+
j--;
17+
} else {
18+
res.push_back(i + 1);
19+
res.push_back(j + 1);
20+
break;
21+
}
22+
}
23+
return res;
24+
}
25+
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /