int cmp(const void* a,const void* b){ return *(int*)a > *(int*)b; } int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){ if (!nums1Size || !nums2Size){ *returnSize=0; return NULL; } qsort(nums1,nums1Size,sizeof(int),cmp); qsort(nums2,nums2Size,sizeof(int),cmp); int i=0,j=0,pst=0; while(i<nums1Size && j<nums2Size) { if (nums1[i]<nums2[j]) i++; else if (nums1[i]>nums2[j]) j++; else{ nums2[pst++]=nums1[i]; i++; j++; if (pst >1 && nums2[pst-1] == nums2[pst-2]) pst--; } } *returnSize=pst; return nums2; }