-
- 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;
- }