2024-03-19 02:45:09 +08:00

86 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
/**
* 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(i<nums1Size && j<nums2Size)
{
if(nums1[i]>nums2[j])
j++;
else if(nums1[i]<nums2[j])
i++;
else if(nums1[i] == nums2[j])
{
res[length++] = nums1[i];
i++;
j++;
}
}
*returnSize = length;
return res;
}
*/
int main()
{
// int a1[] = {3, 1, 2};
// int a2[] = {1};
int a1[] = {61, 24, 20, 58, 95, 53, 17, 32, 45, 85, 70, 20, 83, 62, 35, 89, 5, 95, 12, 86, 58, 77, 30, 64, 46, 13, 5, 92, 67, 40, 20, 38, 31, 18, 89, 85, 7, 30, 67, 34, 62, 35, 47, 98, 3, 41, 53, 26, 66, 40, 54, 44, 57, 46, 70, 60, 4, 63, 82, 42, 65, 59, 17, 98, 29, 72, 1, 96, 82, 66, 98, 6, 92, 31, 43, 81, 88, 60, 10, 55, 66, 82, 0, 79, 11, 81};
int a2[] = {5, 25, 4, 39, 57, 49, 93, 79, 7, 8, 49, 89, 2, 7, 73, 88, 45, 15, 34, 92, 84, 38, 85, 34, 16, 6, 99, 0, 2, 36, 68, 52, 73, 50, 77, 44, 61, 48};
int len = 0;
intersect(a1, sizeof(a1) / sizeof(int), a2, sizeof(a2) / sizeof(int), &len);
printf("%d\n", len);
getchar();
return 0;
}