Skip to content

Commit 3a51378

Browse files
authored
Update README.md
1 parent 19aa57a commit 3a51378

File tree

1 file changed

+41
-50
lines changed

1 file changed

+41
-50
lines changed

solution/0000-0099/0015.3Sum/README.md

Lines changed: 41 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -455,59 +455,50 @@ class Solution {
455455

456456
#### C
457457

458-
```C
459-
460-
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }
461-
462-
int **threeSum(int *nums, int numsSize, int *returnSize,
463-
int **returnColumnSizes) {
464-
*returnSize = 0;
465-
int capacity = 100;
466-
int **result = malloc(capacity * sizeof(int *));
467-
int *colSizes = malloc(capacity * sizeof(int));
468-
qsort(nums, numsSize, sizeof(int), cmp);
469-
470-
for (int i = 0; i < numsSize - 2; i++) {
471-
if (nums[i] > 0)
472-
break;
473-
if (i > 0 && nums[i] == nums[i - 1])
474-
continue;
475-
476-
int j = i + 1, k = numsSize - 1;
477-
while (j < k) {
478-
int sum = nums[i] + nums[j] + nums[k];
479-
if (sum < 0) {
480-
j++;
481-
} else if (sum > 0) {
482-
k--;
483-
} else {
484-
if (*returnSize >= capacity) {
485-
capacity *= 2;
486-
result = realloc(result, capacity * sizeof(int *));
487-
colSizes = realloc(colSizes, capacity * sizeof(int));
488-
}
458+
```c
459+
int cmp(const void* a, const void* b) {
460+
return *(int*) a - *(int*) b;
461+
}
489462

490-
result[*returnSize] = malloc(3 * sizeof(int));
491-
result[*returnSize][0] = nums[i];
492-
result[*returnSize][1] = nums[j];
493-
result[*returnSize][2] = nums[k];
494-
colSizes[*returnSize] = 3;
495-
(*returnSize)++;
496-
497-
j++;
498-
k--;
499-
while (j < k && nums[j] == nums[j - 1])
500-
j++;
501-
while (j < k && nums[k] == nums[k + 1])
502-
k--;
503-
}
504-
}
505-
}
463+
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
464+
*returnSize = 0;
465+
int cap = 1000;
466+
int** ans = (int**) malloc(sizeof(int*) * cap);
467+
*returnColumnSizes = (int*) malloc(sizeof(int) * cap);
506468

507-
*returnColumnSizes = colSizes;
508-
return result;
509-
}
469+
qsort(nums, numsSize, sizeof(int), cmp);
510470

471+
for (int i = 0; i < numsSize - 2 && nums[i] <= 0; ++i) {
472+
if (i > 0 && nums[i] == nums[i - 1]) continue;
473+
int j = i + 1, k = numsSize - 1;
474+
while (j < k) {
475+
int sum = nums[i] + nums[j] + nums[k];
476+
if (sum < 0) {
477+
++j;
478+
} else if (sum > 0) {
479+
--k;
480+
} else {
481+
if (*returnSize >= cap) {
482+
cap *= 2;
483+
ans = (int**) realloc(ans, sizeof(int*) * cap);
484+
*returnColumnSizes = (int*) realloc(*returnColumnSizes, sizeof(int) * cap);
485+
}
486+
ans[*returnSize] = (int*) malloc(sizeof(int) * 3);
487+
ans[*returnSize][0] = nums[i];
488+
ans[*returnSize][1] = nums[j];
489+
ans[*returnSize][2] = nums[k];
490+
(*returnColumnSizes)[*returnSize] = 3;
491+
(*returnSize)++;
492+
493+
++j;
494+
--k;
495+
while (j < k && nums[j] == nums[j - 1]) ++j;
496+
while (j < k && nums[k] == nums[k + 1]) --k;
497+
}
498+
}
499+
}
500+
return ans;
501+
}
511502
```
512503
513504
<!-- tabs:end -->

0 commit comments

Comments
 (0)