mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
[0018 fourSum]add C version
add C version for 0018: fourSum problem Signed-off-by: liao junwu <andyliaowu5@163.com>
This commit is contained in:
@ -151,6 +151,96 @@ if (nums[k] + nums[i] > target && nums[i] >= 0) {
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
### C:
|
||||
|
||||
```C
|
||||
/* qsort */
|
||||
static int cmp(const void* arg1, const void* arg2) {
|
||||
int a = *(int *)arg1;
|
||||
int b = *(int *)arg2;
|
||||
return (a > b);
|
||||
}
|
||||
|
||||
int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes) {
|
||||
|
||||
/* 对nums数组进行排序 */
|
||||
qsort(nums, numsSize, sizeof(int), cmp);
|
||||
|
||||
int **res = (int **)malloc(sizeof(int *) * 40000);
|
||||
int index = 0;
|
||||
|
||||
/* k */
|
||||
for (int k = 0; k < numsSize - 3; k++) { /* 第一级 */
|
||||
|
||||
/* k剪枝 */
|
||||
if ((nums[k] > target) && (nums[k] >= 0)) {
|
||||
break;
|
||||
}
|
||||
/* k去重 */
|
||||
if ((k > 0) && (nums[k] == nums[k - 1])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* i */
|
||||
for (int i = k + 1; i < numsSize - 2; i++) { /* 第二级 */
|
||||
|
||||
/* i剪枝 */
|
||||
if ((nums[k] + nums[i] > target) && (nums[i] >= 0)) {
|
||||
break;
|
||||
}
|
||||
/* i去重 */
|
||||
if ((i > (k + 1)) && (nums[i] == nums[i - 1])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* left and right */
|
||||
int left = i + 1;
|
||||
int right = numsSize - 1;
|
||||
|
||||
while (left < right) {
|
||||
|
||||
/* 防止大数溢出 */
|
||||
long long val = (long long)nums[k] + nums[i] + nums[left] + nums[right];
|
||||
if (val > target) {
|
||||
right--;
|
||||
} else if (val < target) {
|
||||
left++;
|
||||
} else {
|
||||
int *res_tmp = (int *)malloc(sizeof(int) * 4);
|
||||
res_tmp[0] = nums[k];
|
||||
res_tmp[1] = nums[i];
|
||||
res_tmp[2] = nums[left];
|
||||
res_tmp[3] = nums[right];
|
||||
res[index++] = res_tmp;
|
||||
|
||||
/* right去重 */
|
||||
while ((right > left) && (nums[right] == nums[right - 1])) {
|
||||
right--;
|
||||
}
|
||||
/* left去重 */
|
||||
while ((left < right) && (nums[left] == nums[left + 1])) {
|
||||
left++;
|
||||
}
|
||||
|
||||
/* 更新right与left */
|
||||
left++, right--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 返回值处理 */
|
||||
*returnSize = index;
|
||||
|
||||
int *column = (int *)malloc(sizeof(int) * index);
|
||||
for (int i = 0; i < index; i++) {
|
||||
column[i] = 4;
|
||||
}
|
||||
*returnColumnSizes = column;
|
||||
return res;
|
||||
}
|
||||
```
|
||||
|
||||
### Java:
|
||||
|
||||
```Java
|
||||
|
Reference in New Issue
Block a user