鱼C论坛

 找回密码
 立即注册
查看: 3505|回复: 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;
}



哪里有问题呢

题干

题干

结果

结果
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

请问你可以先发你的完整代码吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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


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

你看看编译的时候是不是会有warning提示
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你是不是没有free()?!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你是不是没有free()?!

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

我看不懂楼主的做法,但能看出来双重循环处内层循环的循环变量( nums2 )没有复位,这导致在这组输入上得到空列表结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 21:32:37 | 显示全部楼层
楼主的代码我有点看不懂
所以我自己写了一个
也许会对你有帮助吧。

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

  3. int intersection(int* nums1, int size1, int* nums2, int size2, int *result)
  4. {
  5.         int *p1=nums1,*p2=nums2,i,j,s=0/*统计temp中元素个数*/,count/*判断是否重复*/,status=1;
  6.         int temp[size1>size2?size1:size2];
  7.         for(i=0;i<size1;i++)
  8.         {
  9.                 p2=nums2;
  10.                 for(j=0;j<size2;j++)//遍历所有元素组合
  11.                 {
  12.                         if(*p1==*p2)//如果值相等
  13.                         {
  14.                                 for(count=0;count<s;count++)//判断是否已有该元素
  15.                                 {
  16.                                         if(temp[count]==*p1)//已有重复
  17.                                         {
  18.                                                 status=0;
  19.                                                
  20.                                                 break;
  21.                                         }
  22.                                 }
  23.                                 if(status)
  24.                                 {
  25.                                         temp[s]=*p1;
  26.                                         s++;
  27.                                 }
  28.                         }
  29.                         status=1;
  30.                        
  31.                         p2++;
  32.                 }
  33.                
  34.                 p1++;
  35.         }
  36.         int _result[s];
  37.         for(int c=0;c<s;c++)
  38.         {
  39.                 _result[s]=temp[s];
  40.         }
  41.         result=_result;
  42.         return s;
  43. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-18 11:45:35 | 显示全部楼层
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i,j,k,count =0,m,n,c[256];
  5.         scanf("%d%d",&m,&n);
  6.         int a[m],b[n];
  7.         for(i=0;i<m;i++)scanf("%d",&a[i]);
  8.         for(i=0;i<n;i++)scanf("%d",&b[i]);
  9.         for(i=0;i<m;i++)
  10.                 for(j=0;j<n;j++){
  11.                         if(a[i]==b[j]){
  12.                         c[count++]=b[j];
  13.                        
  14.                 }
  15.         }
  16.         for(i=0;i<n;i++)
  17.                 for(j=0;j<m;j++){
  18.                         if(b[i]==a[j]){
  19.                                 c[count++]=a[j];
  20.                         }
  21.                 }
  22.                
  23.         for(i=0;i<count;i++)
  24.                 for(j=i+1;j<count;j++){
  25.                         if(c[i]==c[j]){
  26.                                 c[i]=c[j];
  27.                                 for(k=j;k<count-1;k++)c[k]=c[k+1];
  28.                                 count--;
  29.                                 j--;
  30.                         }
  31.                
  32.                         }
  33.        
  34.         for(i=0;i<count;i++)printf("%d ",c[i]);
  35.         return 0;
  36. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  5. 2、
  6. 没有去重,导致count的计数是不准确的
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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