【问题标题】:Intersection of Two Arrays II using C两个数组的交集 II 使用 C
【发布时间】:2020-11-03 14:33:01
【问题描述】:

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9] 注意:

结果中的每个元素出现的次数应与它在两个数组中的显示次数一样多。 结果可以是任何顺序。 跟进:

如果给定的数组已经排序了怎么办?你会如何优化你的算法? 如果 nums1 的大小比 nums2 的大小小怎么办?哪种算法更好? 如果 nums2 的元素存储在磁盘上,并且内存有限,无法一次将所有元素加载到内存中怎么办? 我的解决方案:

int cmp(const void *a,const void *b){
    return *(const int *)a - *(const int *)b;
}

int min(int num1,int num2){
    if(num1<=num2){
        return num1;
    }
    else{
        return num2;
    }
}

/*
Note: The returned array must be malloced, assume caller calls free().
*/
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 minimum = min(nums1Size,nums2Size);
    int* arr = (int*)malloc(sizeof(int)*minimum);
    
    int i=0,j=0,index=0;
    while(i<nums1Size && j<nums2Size){
        if(nums1[i]<nums2[j]){
            i++;
        }
        else if(nums2[j]<nums1[i]){
            j++;
        }
        else if(nums1[i]==nums2[j]){
            arr[index]=nums1[i];
            printf("%d ", arr[index]);
            i++;j++;index++;
        }
    }

    for(i=0;i<minimum;i++){
        printf("%d ",arr[i]);
    }
    
    return arr;
}

当我运行上面的代码时,我得到的输出是 ] 虽然我的逻辑是正确的。上面的 printf 语句给出了正确的答案,如下所示:

知道我的代码中的错误是什么。我不需要任何其他方法。我只希望你帮助我编写代码。先感谢您! 我正在使用 LeetCode。

【问题讨论】:

    标签: arrays c


    【解决方案1】:

    您的代码是正确的。它只打印两次结果,一次在intersectwhile 循环中,另一次在for 循环中,在while 下方。此外,它没有以预期的格式打印。

    只需删除while 循环中的printf,而不是您拥有的for 循环,使用这个:

    printf("[");
    for(i=0;i<minimum;i++){
        if (i < minimum-1){
            printf("%d,",arr[i]);
        }
        else {
            printf("%d",arr[i]);
        }
    }
    printf("]");
    

    【讨论】:

    • 我添加的 printf 语句是为了检查我的代码是否正常运行。我在 leetcode 上编码,所以他们已经定义了他们的主要功能。我所要做的就是返回带有重复项的数组并打印数组是他们的工作。在我的问题的上图中,您可以在“您的答案”部分中看到,它为我的数组打印 ] this。而预期的答案是[2,2]。知道为什么会这样吗?
    • 对不起,不知道。在这种情况下,问题在于您没有在intersect 函数中更新returnSize。只需在return arr;之前写returnSize = index;
    猜你喜欢
    • 2011-08-16
    • 2011-01-24
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多