前言
- 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。
- 个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer:
目录
- 前言
- 问题描述:
- 举例:
- 解法思路:
- 代码结果:
- 结束语
问题描述:
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1。
数据范围:0≤n≤10000
进阶:时间复杂度O(n),空间复杂度O(n)
举例:
//输入:
[2,3,1,0,2,5,3]
//返回值:
2
//说明:2或3都是对的
解法思路:
-
只需要重新设计一个等长的数组,用于计数原题目中给出的数组元素出现的次数,最后返回相应的数组元素。
-
如果没有说“长度为n的数组里的所有数字都在0到n-1范围内”,那就需要设计一个大范围的数组或者动态数组。
代码结果:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @param numbersLen int numbers数组长度
* @return int整型
*/
int duplicate(int* numbers, int numbersLen ) {
int num[10000];//数据范围:0≤n≤10000
int i;
//数组初始化
for(i=0;i<numbersLen;i++){
num[i] = 0;
}
//按照给定的number数组,对应的num数组进行计数,计算有多少个重复的数字
for(i=0;i<numbersLen;i++){
num[numbers[i]]++;
}
for(i=0;i<numbersLen;i++){
if(num[numbers[i]]>1)
return numbers[i];
}
return -1;
}
结束语
- 以上就是该C语言编程题的内容。可以在牛客尝试刷几道题目来练习实践。牛客网刷题(点击可以跳转),可以尝试注册使用。
- 题目来自:牛客/题库 / 在线编程 / 剑指offer: