Skip to content

Commit 8c9f0f2

Browse files
authored
Update Solution.c
1 parent 0ac3a5b commit 8c9f0f2

File tree

1 file changed

+26
-33
lines changed

1 file changed

+26
-33
lines changed
Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,43 @@
1-
int cmp(const void* a, const void* b) { return *(int*) a - *(int*) b; }
1+
int cmp(const void* a, const void* b) {
2+
return *(int*) a - *(int*) b;
3+
}
24

3-
int** threeSum(int* nums, int numsSize, int* returnSize,
4-
int** returnColumnSizes) {
5+
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
56
*returnSize = 0;
6-
int capacity = 100;
7-
int** result = malloc(capacity * sizeof(int*));
8-
int* colSizes = malloc(capacity * sizeof(int));
9-
qsort(nums, numsSize, sizeof(int), cmp);
7+
int cap = 1000;
8+
int** ans = (int**) malloc(sizeof(int*) * cap);
9+
*returnColumnSizes = (int*) malloc(sizeof(int) * cap);
1010

11-
for (int i = 0; i < numsSize - 2; i++) {
12-
if (nums[i] > 0)
13-
break;
14-
if (i > 0 && nums[i] == nums[i - 1])
15-
continue;
11+
qsort(nums, numsSize, sizeof(int), cmp);
1612

13+
for (int i = 0; i < numsSize - 2 && nums[i] <= 0; ++i) {
14+
if (i > 0 && nums[i] == nums[i - 1]) continue;
1715
int j = i + 1, k = numsSize - 1;
1816
while (j < k) {
1917
int sum = nums[i] + nums[j] + nums[k];
2018
if (sum < 0) {
21-
j++;
19+
++j;
2220
} else if (sum > 0) {
23-
k--;
21+
--k;
2422
} else {
25-
if (*returnSize >= capacity) {
26-
capacity *= 2;
27-
result = realloc(result, capacity * sizeof(int*));
28-
colSizes = realloc(colSizes, capacity * sizeof(int));
23+
if (*returnSize >= cap) {
24+
cap *= 2;
25+
ans = (int**) realloc(ans, sizeof(int*) * cap);
26+
*returnColumnSizes = (int*) realloc(*returnColumnSizes, sizeof(int) * cap);
2927
}
30-
31-
result[*returnSize] = malloc(3 * sizeof(int));
32-
result[*returnSize][0] = nums[i];
33-
result[*returnSize][1] = nums[j];
34-
result[*returnSize][2] = nums[k];
35-
colSizes[*returnSize] = 3;
28+
ans[*returnSize] = (int*) malloc(sizeof(int) * 3);
29+
ans[*returnSize][0] = nums[i];
30+
ans[*returnSize][1] = nums[j];
31+
ans[*returnSize][2] = nums[k];
32+
(*returnColumnSizes)[*returnSize] = 3;
3633
(*returnSize)++;
3734

38-
j++;
39-
k--;
40-
while (j < k && nums[j] == nums[j - 1])
41-
j++;
42-
while (j < k && nums[k] == nums[k + 1])
43-
k--;
35+
++j;
36+
--k;
37+
while (j < k && nums[j] == nums[j - 1]) ++j;
38+
while (j < k && nums[k] == nums[k + 1]) --k;
4439
}
4540
}
4641
}
47-
48-
*returnColumnSizes = colSizes;
49-
return result;
42+
return ans;
5043
}

0 commit comments

Comments
 (0)