#include #include #include #include /** * https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/description/ * 两个数组的交集 II */ int *intersect(int *nums1, int nums1Size, int *nums2, int nums2Size, int *returnSize) { int *ret = 0, len = nums1Size; if (nums1Size > nums2Size) //num1换为长的 { // int *tmp = nums1; // nums1 = nums2; // nums2 = tmp; len = nums2Size; } ret = malloc(sizeof(int) * len); len = 0; for (int i = 0; i < nums1Size; i++) { for (int n = len; n < nums2Size; n++) //从len开始 { if (nums1[i] == nums2[n]) //每当相等时,将这个位置的数字和len位置的对调 { nums2[n] = nums2[len]; nums2[len] = nums1[i]; ret[len++] = nums1[i]; break; } } } *returnSize = len; return ret; } /* //大佬的写法 int cmp(const void * a, const void * b) { if(*(int *)a == INT_MIN) return (*(int *)a); else if (*(int *)b == INT_MIN) return 1; else return (*(int*)a - *(int*)b); } int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) { qsort(nums1,nums1Size,sizeof(int),cmp); qsort(nums2,nums2Size,sizeof(int),cmp); int len = nums1Size < nums2Size ? nums1Size : nums2Size; int * res = malloc(sizeof(int)*len); int length = 0; int i = 0 ,j = 0; while(inums2[j]) j++; else if(nums1[i]