@@ -151,6 +151,96 @@ if (nums[k] + nums[i] > target && nums[i] >= 0) {
151
151
152
152
## 其他语言版本
153
153
154
+ ### C:
155
+
156
+ ``` C
157
+ /* qsort */
158
+ static int cmp (const void* arg1, const void* arg2) {
159
+ int a = * (int * )arg1;
160
+ int b = * (int * )arg2;
161
+ return (a > b);
162
+ }
163
+
164
+ int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes) {
165
+
166
+ /* 对nums数组进行排序 */
167
+ qsort(nums, numsSize, sizeof(int), cmp);
168
+
169
+ int **res = (int **)malloc(sizeof(int *) * 40000);
170
+ int index = 0;
171
+
172
+ /* k */
173
+ for (int k = 0; k < numsSize - 3; k++) { /* 第一级 */
174
+
175
+ /* k剪枝 */
176
+ if ((nums[k] > target) && (nums[k] >= 0)) {
177
+ break;
178
+ }
179
+ /* k去重 */
180
+ if ((k > 0) && (nums[k] == nums[k - 1])) {
181
+ continue;
182
+ }
183
+
184
+ /* i */
185
+ for (int i = k + 1; i < numsSize - 2; i++) { /* 第二级 */
186
+
187
+ /* i剪枝 */
188
+ if ((nums[k] + nums[i] > target) && (nums[i] >= 0)) {
189
+ break;
190
+ }
191
+ /* i去重 */
192
+ if ((i > (k + 1)) && (nums[i] == nums[i - 1])) {
193
+ continue;
194
+ }
195
+
196
+ /* left and right */
197
+ int left = i + 1;
198
+ int right = numsSize - 1;
199
+
200
+ while (left < right) {
201
+
202
+ /* 防止大数溢出 */
203
+ long long val = (long long)nums[k] + nums[i] + nums[left] + nums[right];
204
+ if (val > target) {
205
+ right--;
206
+ } else if (val < target) {
207
+ left++;
208
+ } else {
209
+ int *res_tmp = (int *)malloc(sizeof(int) * 4);
210
+ res_tmp[0] = nums[k];
211
+ res_tmp[1] = nums[i];
212
+ res_tmp[2] = nums[left];
213
+ res_tmp[3] = nums[right];
214
+ res[index++] = res_tmp;
215
+
216
+ /* right去重 */
217
+ while ((right > left) && (nums[right] == nums[right - 1])) {
218
+ right--;
219
+ }
220
+ /* left去重 */
221
+ while ((left < right) && (nums[left] == nums[left + 1])) {
222
+ left++;
223
+ }
224
+
225
+ /* 更新right与left */
226
+ left++, right--;
227
+ }
228
+ }
229
+ }
230
+ }
231
+
232
+ /* 返回值处理 */
233
+ *returnSize = index;
234
+
235
+ int *column = (int *)malloc(sizeof(int) * index);
236
+ for (int i = 0; i < index; i++) {
237
+ column[i] = 4;
238
+ }
239
+ *returnColumnSizes = column;
240
+ return res;
241
+ }
242
+ ```
243
+
154
244
### Java:
155
245
156
246
```Java
0 commit comments