数组中重复的数字_牛客网

错误

  1. 段错误: 这次很大的一个收获是段错误,所谓的段错误 就是指访问的内存超出了系统所给这个程序的内存空间,因为这个题目给的是1~n,在测试样例和考虑范围内肯定要考虑极限,也就是给到n,而我在申请数组的时候申请的空间是n+1(一般是为了保险起见),所以一直报段错误。
  2. 跳出循环问题: break和continue的区别
    循环套外层,内部有if判断条件,是否跳出当前这次循环,break的用法是跳出这循环,continue是跳过这循环进入下一次循环,也就是:

break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue
用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。


这个问题需要在后续继续实践

使用的方法:虚拟数组

  1. 以给出的例子,图片如下:
    申请一个与原数组相同大小的数组Num[],存储的数字为下标出现的次数,这个方法实现的时间复杂度是O(n),空间复杂度是O(n)
  2. 因为题目的要求是输出哪个都可以,我就让结果一直替换,然后输出的最后一个。挂个小彩带:如果要输出所有的可以用数组存储,返回指针,或者直接printf;挂两条小彩带:输出第一个,不再替换,可以写break;

函数代码

int duplicate(int* numbers, int numbersLen ) {
    // write code here
    int j=0;
    int ans = 0;	
    if (numbersLen < 2)
        return -1;
    else {
        int Num[numbersLen];//用于计数
        for (int k = 0; k < numbersLen; k++) {
            Num[k] = 0;
        }
      	int i;
        for (i = 0; i <numbersLen; i++) {
            int temp = numbers[i];
            Num[temp]++;
        }
        //正常进行
        for (j = 0; j < numbersLen; j++) {
            if (Num[j] > 1)
            {	
                ans = j;
            }   
        }     
    }
    return ans;
}

放在自己的编译器上的完整代码

#include<stdio.h>
int duplicate(int* numbers, int numbersLen );
int main()
{
	int Numb[7]={2,3,1,0,2,5,3};
//	int Numb[1] = {1};
	int t = duplicate(Numb, 7);
//	int t = duplicate(Numb, 1);
	printf("%d",t);
	return 0;
}
int duplicate(int* numbers, int numbersLen ) {
    // write code here
    int j=0;
    int ans = 0;	
    if (numbersLen < 2)
        return -1;
    else {
        int Num[numbersLen];//用于计数
        for (int k = 0; k < numbersLen; k++) {
            Num[k] = 0;
        }
      	int i;
        for (i = 0; i <numbersLen; i++) {
            int temp = numbers[i];
            Num[temp]++;
        }
        //正常进行
        for (j = 0; j < numbersLen; j++) {
            if (Num[j] > 1)
            {	
                ans = j;
            }   
        }     
    }
    return ans;
}

未完待续:
开个小窗户:输入流输入;
还可以用set实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值