【牛客刷题专栏】0x0B:JZ3 数组中重复的数字(C语言编程题)

前言

  • 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失
  • 个人刷题练习系列专栏:个人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:
    在这里插入图片描述

你可能感兴趣的:(#,牛客刷题专栏,c语言,数据结构,算法)