addendum777 发表于 2023-1-17 19:02:05

求助!!

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
    int *result=malloc(sizeof(int)*nums1Size);
    int count=0;
    int *cur=nums2;
    while(nums1!=NULL){
      while(nums2!=NULL){
            if(*nums2==*nums1){
            result=*nums1;
            count++;
            nums2=cur;
            break;
            }
            nums2++;
      }
      nums1++;
    }
    *returnSize=count;
    return result;
}



哪里有问题呢

额外减小 发表于 2023-1-17 19:14:33

本帖最后由 额外减小 于 2023-1-17 19:19 编辑

我来看看
先占个沙发
过会想出答案就发这

请问你可以先发你的完整代码吗?

addendum777 发表于 2023-1-17 19:20:38

我知道哈希法怎么做,也知道这里没有去重,我想知道为什么返回是这样的,和这样除了去重还有没有其他问题,谢谢大家帮我看看

额外减小 发表于 2023-1-17 19:26:45

addendum777 发表于 2023-1-17 19:20
我知道哈希法怎么做,也知道这里没有去重,我想知道为什么返回是这样的,和这样除了去重还有没有其他问题, ...

int* result是局部变量
出了函数就没有了
不能用来返回

你看看编译的时候是不是会有warning提示

额外减小 发表于 2023-1-17 19:30:58

而且

你是不是没有free()?!

dolly_yos2 发表于 2023-1-17 21:25:12

额外减小 发表于 2023-1-17 19:30
而且

你是不是没有free()?!

有没有一种可能,没有 free 所以这段内存不会从函数返回就没了

我看不懂楼主的做法,但能看出来双重循环处内层循环的循环变量( nums2 )没有复位,这导致在这组输入上得到空列表结果

额外减小 发表于 2023-1-17 21:32:37

楼主的代码我有点看不懂
所以我自己写了一个
也许会对你有帮助吧。

#include <stdio.h>
#include <stdlib.h>

int intersection(int* nums1, int size1, int* nums2, int size2, int *result)
{
        int *p1=nums1,*p2=nums2,i,j,s=0/*统计temp中元素个数*/,count/*判断是否重复*/,status=1;
        int temp;
        for(i=0;i<size1;i++)
        {
                p2=nums2;
                for(j=0;j<size2;j++)//遍历所有元素组合
                {
                        if(*p1==*p2)//如果值相等
                        {
                                for(count=0;count<s;count++)//判断是否已有该元素
                                {
                                        if(temp==*p1)//已有重复
                                        {
                                                status=0;
                                               
                                                break;
                                        }
                                }
                                if(status)
                                {
                                        temp=*p1;
                                        s++;
                                }
                        }
                        status=1;
                       
                        p2++;
                }
               
                p1++;
        }
        int _result;
        for(int c=0;c<s;c++)
        {
                _result=temp;
        }
        result=_result;
        return s;
}

basketmn 发表于 2023-1-18 11:45:35

#include<stdio.h>
int main()
{
        int i,j,k,count =0,m,n,c;
        scanf("%d%d",&m,&n);
        int a,b;
        for(i=0;i<m;i++)scanf("%d",&a);
        for(i=0;i<n;i++)scanf("%d",&b);
        for(i=0;i<m;i++)
                for(j=0;j<n;j++){
                        if(a==b){
                        c=b;
                       
                }
        }
        for(i=0;i<n;i++)
                for(j=0;j<m;j++){
                        if(b==a){
                                c=a;
                        }
                }
               
        for(i=0;i<count;i++)
                for(j=i+1;j<count;j++){
                        if(c==c){
                                c=c;
                                for(k=j;k<count-1;k++)c=c;
                                count--;
                                j--;
                        }
               
                        }
       
        for(i=0;i<count;i++)printf("%d ",c);
        return 0;
}

两手空空儿 发表于 2023-1-18 15:34:43

1、
nums1和nums3是数组
while(nums1!=NULL){
      while(nums2!=NULL){   //这两句根本不能判断是不是到达数组的最后, 这是判断指针是不是为NULL

2、
没有去重,导致count的计数是不准确的
页: [1]
查看完整版本: 求助!!