【发布时间】:2021-01-18 01:09:12
【问题描述】:
我在 Eclipse 中的 PC 上尝试了这个问题,它工作正常。但是,当我在LeetCode 中尝试它时它崩溃了,我不明白为什么。
我在 LeetCode 上收到错误 "AddressSanitizer:DEADLYSIGNAL"。而且我无法在网站上调试它,因为我没有高级帐户。
在问题中,我被要求找到解决方案:
给定一个由 n 个整数组成的数组 nums,在 nums 中是否存在元素 a、b、c 使得 a + b + c = 0?在数组中找到所有唯一的三元组,其总和为零。 请注意,解集不得包含重复的三元组。
这是我的代码:
#include "common.h"
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int ii;
bubble_sort(nums, numsSize);
int **arr = (int**) calloc(numsSize* 3, sizeof(int*));
// for (ii = 0; ii < numsSize; ii++)
// arr[ii] = (int*) calloc(3, sizeof(int));
*returnSize = 0;
int i, low, high = 0;
int sum = 0;
int target = 0;
for (i = 0; nums[i] <= 0 && i < numsSize -2;) {
low = i + 1;
high = numsSize - 1;
while ( low < high) {
sum = nums[i] + nums[low] + nums[high];
if (sum > target)
high--;
else if (sum < target)
low++;
else {
*returnSize += 1;
arr[*returnSize-1] = (int*)malloc(sizeof(int)*3);
arr[*returnSize-1][0] = nums[i];
arr[*returnSize-1][1] = nums[low];
arr[*returnSize-1][2] = nums[high];
do high--; while(nums[high] == nums[high+1] && low < high);
}
}
do i++; while (nums[i]==nums[i-1] && i < numsSize-2);
}
return arr;
}
void run_3sum() {
printf("\n ---------- Run 3Sum ----------- \n");
int n = 8;
int i = 0;
int* returnSize = (int*) malloc(sizeof(int));
int** returnColumnSizes = (int**) malloc(sizeof(int));;
int **res;
int arr[8] = {-10, 0, 10, 2, -2, 5, 3, -8};//{-2,0,1,2,-1,3};
int *nums = (int*) calloc(n+4, sizeof(int));
for (i = 0; i < n; i++) {
*nums = arr[i];
nums++;
}
nums = nums - i;
res = threeSum(nums, n, returnSize, returnColumnSizes);
printf("\n Results ---3sum ---\n");
printf_3sum(res, *returnSize, 3);
}
【问题讨论】:
-
int** returnColumnSizes = (int**) malloc(sizeof(int));;看起来很奇怪,但是你根本不使用这个变量,那你为什么不删除它呢? -
是的,我可以删除它,我保留它,因为它在 LeetCode 的函数签名中。在 LeetCode 上,问题似乎出在 sort 函数上。