求助!!
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:19 编辑
我来看看
先占个沙发
过会想出答案就发这
请问你可以先发你的完整代码吗? 我知道哈希法怎么做,也知道这里没有去重,我想知道为什么返回是这样的,和这样除了去重还有没有其他问题,谢谢大家帮我看看 addendum777 发表于 2023-1-17 19:20
我知道哈希法怎么做,也知道这里没有去重,我想知道为什么返回是这样的,和这样除了去重还有没有其他问题, ...
int* result是局部变量
出了函数就没有了
不能用来返回
你看看编译的时候是不是会有warning提示 而且
你是不是没有free()?! 额外减小 发表于 2023-1-17 19:30
而且
你是不是没有free()?!
有没有一种可能,没有 free 所以这段内存不会从函数返回就没了
我看不懂楼主的做法,但能看出来双重循环处内层循环的循环变量( nums2 )没有复位,这导致在这组输入上得到空列表结果 楼主的代码我有点看不懂
所以我自己写了一个
也许会对你有帮助吧。
#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;
} #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;
} 1、
nums1和nums3是数组
while(nums1!=NULL){
while(nums2!=NULL){ //这两句根本不能判断是不是到达数组的最后, 这是判断指针是不是为NULL
2、
没有去重,导致count的计数是不准确的
页:
[1]