鱼C论坛

 找回密码
 立即注册
查看: 3017|回复: 8

求助!!

[复制链接]
发表于 2023-1-17 19:02:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[count]=*nums1;
            count++;
            nums2=cur;
            break;
            }
            nums2++;
        }
        nums1++;
    }
    *returnSize=count;
    return result;
}



哪里有问题呢

题干

题干

结果

结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-17 19:14:33 | 显示全部楼层
本帖最后由 额外减小 于 2023-1-17 19:19 编辑

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

请问你可以先发你的完整代码吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 19:20:38 | 显示全部楼层
我知道哈希法怎么做,也知道这里没有去重,我想知道为什么返回是这样的,和这样除了去重还有没有其他问题,谢谢大家帮我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

你看看编译的时候是不是会有warning提示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 19:30:58 | 显示全部楼层
而且

你是不是没有free()?!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 21:25:12 From FishC Mobile | 显示全部楼层
额外减小 发表于 2023-1-17 19:30
而且

你是不是没有free()?!

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

我看不懂楼主的做法,但能看出来双重循环处内层循环的循环变量( nums2 )没有复位,这导致在这组输入上得到空列表结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[size1>size2?size1:size2];
        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[count]==*p1)//已有重复 
                                        {
                                                status=0;
                                                
                                                break;
                                        }
                                }
                                if(status)
                                {
                                        temp[s]=*p1;
                                        s++;
                                }
                        }
                        status=1;
                        
                        p2++;
                }
                
                p1++;
        }
        int _result[s];
        for(int c=0;c<s;c++)
        {
                _result[s]=temp[s];
        }
        result=_result;
        return s;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-18 11:45:35 | 显示全部楼层
#include<stdio.h>
int main()
{
        int i,j,k,count =0,m,n,c[256];
        scanf("%d%d",&m,&n);
        int a[m],b[n];
        for(i=0;i<m;i++)scanf("%d",&a[i]);
        for(i=0;i<n;i++)scanf("%d",&b[i]);
        for(i=0;i<m;i++)
                for(j=0;j<n;j++){
                        if(a[i]==b[j]){
                        c[count++]=b[j];
                        
                }
        }
        for(i=0;i<n;i++)
                for(j=0;j<m;j++){
                        if(b[i]==a[j]){
                                c[count++]=a[j];
                        }
                }
                
        for(i=0;i<count;i++)
                for(j=i+1;j<count;j++){
                        if(c[i]==c[j]){
                                c[i]=c[j];
                                for(k=j;k<count-1;k++)c[k]=c[k+1];
                                count--;
                                j--;
                        }
                
                        }
        
        for(i=0;i<count;i++)printf("%d ",c[i]);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-18 15:34:43 | 显示全部楼层
1、
nums1和nums3是数组
while(nums1!=NULL){
        while(nums2!=NULL){   //这两句根本不能判断是不是到达数组的最后, 这是判断指针是不是为NULL

2、
没有去重,导致count的计数是不准确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表