@@ -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