題目:

解答:
/**
* 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** findDifference(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize, int** returnColumnSizes)
{
#define OFFSET 1000
#define MAX_SIZE 2001
int i = 0;
int idx = 0;
int s1[MAX_SIZE] = { 0 };
int s2[MAX_SIZE] = { 0 };
int **r = calloc(sizeof(int *), 2);
for (i = 0; i < 2; i++) {
r[i] = calloc(sizeof(int), MAX_SIZE);
}
*returnSize = 2;
*returnColumnSizes = calloc(sizeof(int), 2);
for (i = 0; i < nums1Size; i++) {
s1[nums1[i] + OFFSET] += 1;
}
for (i = 0; i < nums2Size; i++) {
s2[nums2[i] + OFFSET] += 1;
}
idx = 0;
for (i = 0; i < nums1Size; i++) {
if (s2[nums1[i] + OFFSET] == 0) {
r[0][idx++] = nums1[i];
s2[nums1[i] + OFFSET] += 1;
}
}
(*returnColumnSizes)[0] = idx;
idx = 0;
for (i = 0; i < nums2Size; i++) {
if (s1[nums2[i] + OFFSET] == 0) {
r[1][idx++] = nums2[i];
s1[nums2[i] + OFFSET] += 1;
}
}
(*returnColumnSizes)[1] = idx;
return r;
}