c语言数据结构数组中重复的数字


算法没有学怎么办?哈希表不知道怎么办?

在我这里通通不需要,只通过大一刚学的知识就可以快速做出!

仅需要三步:
(1)初始化一个新的数组(萌新表示申请新的内存初始化掌握并不熟练),因此只用for循环手动初始化。

(2)遍历数组,因为只会存在0~n-1的数字,如果存在重复的数字,则一个索引会对应多个相同的数字。

(3)对每次索引的数字+1,循环到出现第一次重复的数字时,返回这个重复的数字,若均不重复,则返回-1int findRepeatNumber(int* nums, int numsSize){
    int i;
    int arr[numsSize];
    for(i=0; i<numsSize;i++)
    { 
    arr[i] = 0;
    }
    for(i=0;i<numsSize;i++)
    {
        if(arr[nums[i]]>=1)
        {
            return nums[i];
        }
        else
        {
            arr[nums[i]]++;
        }
    }
    return -1;
}

第二部没有看懂

供参考:

int findRepeatNumber(int* nums, int numsSize) {
    int i;
    int arr[numsSize];
    for (i = 0; i < numsSize; i++) // 数组 arr[] 元素初始化为 0 
    {
        arr[i] = 0;
    }
    for (i = 0; i < numsSize; i++)
    {
        if (arr[nums[i]] >= 1) // arr[]数组元素下标为 nums[i]值位置的元素 >=1 时,表明这个数字nums[i]第二次出现了
        {
            return nums[i];   // 返回第一次出现的重复数字 nums[i]
        }
        else
        {
            arr[nums[i]]++; // 假如 nums[i] = 9, arr[9]++ ,数组 arr[]第9个元素值为 1,a[9] = 1 
        }
    }
    return -1;
}

显然,他的意思是对于输入的数组里面的值nums[i]的范围在0n-1之间,这样定义一个新的数组,全部赋初值为0,再将输入数组中的元素作为索引,判断新数组的值是否为零,为零则++;不为零即为已经出现过一次,返回该值;但显然他这一个算法只能在范围0n-1内适用,且只能找到第一个重复的元素,无法找到所有重复的元素,如果想找到所有重复元素可以将返回一个数组;如果对map或者hash有所了解应该能立马看明白