@@ -451,59 +451,50 @@ class Solution {
451451
452452#### C
453453
454- ``` C
455-
456- int cmp (const void * a, const void * b) { return * (int * )a - * (int * )b; }
457-
458- int ** threeSum(int * nums, int numsSize, int * returnSize,
459- int ** returnColumnSizes) {
460- * returnSize = 0;
461- int capacity = 100;
462- int ** result = malloc(capacity * sizeof(int * ));
463- int * colSizes = malloc(capacity * sizeof(int));
464- qsort(nums, numsSize, sizeof(int), cmp);
465-
466- for (int i = 0; i < numsSize - 2; i++) {
467- if (nums[ i] > 0)
468- break;
469- if (i > 0 && nums[ i] == nums[ i - 1] )
470- continue;
471-
472- int j = i + 1, k = numsSize - 1;
473- while (j < k) {
474- int sum = nums[i] + nums[j] + nums[k];
475- if (sum < 0) {
476- j++;
477- } else if (sum > 0) {
478- k--;
479- } else {
480- if (*returnSize >= capacity) {
481- capacity *= 2;
482- result = realloc(result, capacity * sizeof(int *));
483- colSizes = realloc(colSizes, capacity * sizeof(int));
484- }
454+ ``` c
455+ int cmp (const void* a, const void* b) {
456+ return * (int* ) a - * (int* ) b;
457+ }
485458
486- result[*returnSize] = malloc(3 * sizeof(int));
487- result[*returnSize][0] = nums[i];
488- result[*returnSize][1] = nums[j];
489- result[*returnSize][2] = nums[k];
490- colSizes[*returnSize] = 3;
491- (*returnSize)++;
492-
493- j++;
494- k--;
495- while (j < k && nums[j] == nums[j - 1])
496- j++;
497- while (j < k && nums[k] == nums[k + 1])
498- k--;
499- }
500- }
501- }
459+ int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
460+ * returnSize = 0;
461+ int cap = 1000;
462+ int** ans = (int** ) malloc(sizeof(int* ) * cap);
463+ * returnColumnSizes = (int* ) malloc(sizeof(int) * cap);
502464
503- * returnColumnSizes = colSizes;
504- return result;
505- }
465+ qsort(nums, numsSize, sizeof(int), cmp);
506466
467+ for (int i = 0; i < numsSize - 2 && nums[i] <= 0; ++i) {
468+ if (i > 0 && nums[i] == nums[i - 1]) continue;
469+ int j = i + 1, k = numsSize - 1;
470+ while (j < k) {
471+ int sum = nums[i] + nums[j] + nums[k];
472+ if (sum < 0) {
473+ ++j;
474+ } else if (sum > 0) {
475+ --k;
476+ } else {
477+ if (*returnSize >= cap) {
478+ cap *= 2;
479+ ans = (int**) realloc(ans, sizeof(int*) * cap);
480+ *returnColumnSizes = (int*) realloc(*returnColumnSizes, sizeof(int) * cap);
481+ }
482+ ans[*returnSize] = (int*) malloc(sizeof(int) * 3);
483+ ans[*returnSize][0] = nums[i];
484+ ans[*returnSize][1] = nums[j];
485+ ans[*returnSize][2] = nums[k];
486+ (*returnColumnSizes)[*returnSize] = 3;
487+ (*returnSize)++;
488+
489+ ++j;
490+ --k;
491+ while (j < k && nums[j] == nums[j - 1]) ++j;
492+ while (j < k && nums[k] == nums[k + 1]) --k;
493+ }
494+ }
495+ }
496+ return ans;
497+ }
507498```
508499
509500<!-- tabs:end -->
0 commit comments