void* cmp(const void*a,const void* b)
{
return *(int*)a - *(int*)b;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int *sum = (int*)malloc(1000*sizeof(int));
int i,j;
int temp = -1;
int t = 0;
int *end;
int * res;
qsort(nums1,nums1Size,sizeof(int),cmp);
qsort(nums2,nums2Size,sizeof(int),cmp);
for(i=0;i<nums1Size;i++) {
if (nums1[i] == temp)
continue;
temp = nums1[i];
for(j=0;j<nums2Size;j++) {
if (nums2[j] == nums1[i]) {
sum[t] = nums1[i];
t += 1;
break;
}
}
}
end = (int*)malloc(sizeof(int)*t);
res = memcpy(end,sum,t*sizeof(int));
*returnSize =t;
return end;
}
用了最简单的方法做的;太久不写C了,一开始还不理解*returnSize的作用,没有对它赋值,导致运行的有问题;
memcpy那里一开始我使用的是strncpy,这是不对的;strncpy只用于字符型数组的拷贝,其他类型还是要要用memcpy,而且注意最后一个参数,表示的是字节数(例如用int ,需要*4)
还有一种哈希散列的写法:
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int s[1001] = {0};
int i;
for (i=0;i<nums1Size;i++) {
s[nums1[i]] = 1;
}
for(i=0;i<nums2Size;i++) {
if (s[nums2[i]] == 1)
s[nums2[i]] = 2;
}
int *result = (int*)malloc(sizeof(int)*1001);
*returnSize = 0;
for(i=0;i<1001;i++) {
if (s[i] == 2)
result[(*returnSize)++] = i;
}
return result;
}