69,370
社区成员
发帖
与我相关
我的任务
分享
void quickSort(int* nums, int left, int right);
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
if(numsSize < 3)
{
*returnSize = 0;
return NULL;
}
int **re = (int**)malloc(sizeof(int*) * 1500); //Line2222;
*returnColumnSizes = (int*)malloc(sizeof(int) * 1500); //Line3333
quickSort(nums, 0, numsSize - 1);
int geshu = 0;
for(int i = 0; i < numsSize - 2 && nums[i] <= 0 && geshu < INT_MAX; i++)
{
if(i > 0 && nums[i] == nums[i-1])
continue;
for(int j = i + 1, k = numsSize - 1; j < k && nums[k] >= 0;)
{
if(j > 0 && nums[j] == nums[j - 1])
{
j++;
continue;
}
if(k < numsSize - 1 && nums[k] == nums[k + 1])
{
k--;
continue;
}
long temp = nums[i] + nums[j] + nums[k];
if(temp == 0)
{
re[geshu] = (int*)malloc(sizeof(int) * 3); //Line 37 这里报错。
re[geshu][0] = nums[i];
re[geshu][1] = nums[j];
re[geshu][2] = nums[k];
(*returnColumnSizes)[geshu] = 3;
geshu++;
}
else if(temp > 0)
{
k--;
}
else
{
j++;
}
}
}
* returnSize = geshu;
return re;
}
void quickSort(int* nums, int left, int right)
{
if(left >= right)
return;
int i = left, j = right, key = nums[left];
while(i < j)
{
while(i < j && nums[j] >= key)
j--;
nums[i] = nums[j];
while(i < j && nums[i] <= key)
i++;
nums[j] = nums[i];
}
nums[i] = key;
quickSort(nums, 0, i - 1);
quickSort(nums, i + 1, right);
}
void quickSort(int* nums, int left, int right);
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
if(numsSize < 3)
{
*returnSize = 0;
return NULL;
}
int **re = (int**)malloc(sizeof(int*) * numsSize * 2);
*returnColumnSizes = (int*)malloc(sizeof(int) * numsSize * 2);
quickSort(nums, 0, numsSize - 1);
int geshu = 0;
for(int i = 0; i < numsSize - 2 && nums[i] <= 0; i++)
{
if(i > 0 && nums[i] == nums[i-1])
continue;
for(int j = i + 1, k = numsSize - 1; j < k && nums[k] >= 0;)
{
long temp = nums[i] + nums[j] + nums[k];
if(temp == 0)
{
re[geshu] = (int*)malloc(sizeof(int) * 3);
re[geshu][0] = nums[i];
re[geshu][1] = nums[j];
re[geshu][2] = nums[k];
(*returnColumnSizes)[geshu++] = 3;
while(j < k && nums[j] == nums[j + 1])
j++;
while(j < k && nums[k] == nums[k - 1])
k--;
j++;
k--;
}
else if(temp > 0)
{
k--;
}
else
{
j++;
}
}
}
* returnSize = geshu;
return re;
}
void quickSort(int* nums, int left, int right)
{
if(left >= right)
return;
int i = left, j = right, key = nums[left];
while(i < j)
{
while(i < j && nums[j] >= key)
j--;
nums[i] = nums[j];
while(i < j && nums[i] <= key)
i++;
nums[j] = nums[i];
}
nums[i] = key;
quickSort(nums, 0, i - 1);
quickSort(nums, i + 1, right);
}