找出数组中重复的数字(c语言)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找出数组中重复的数字(c语言)相关的知识,希望对你有一定的参考价值。

技术图片让人瑟瑟发抖的面试题


来我们看一下题目
在一个 长度为n的数组里的所有数字都在0~n-的范围内。数组中某些数字是重复的,但不知道有几个数字重复伦理,也不知道每个数字重复了多少次,找出任意一个重复的数字
注意:时间复杂度O(n),空间复杂度O(1)

技术图片怎么解决勒???
分析:利用题目中0~n-1范围,可以运用数组下标和数组内容进行比较
if (arr[i] != arr[arr[i]]),如果不相等时,进行调换,相等时,直接返回值
技术图片来看看代码

#include<stdio.h>
#define SIZE(arr) sizeof(arr)/sizeof(arr[0])//数组长度

void Swap(int *left, int *right)

    int tmp = *left;
    *left = *right;
    *right = tmp;

int duplicate(int arr[],int len)

    int i;
    if (len < 0)
    
        return 0;
    
    for (i = 0; i < len; i++)
    
        if (arr[i] < 0 || arr[i]>len - 1)//限定数字大小
        
            return 0;
        
        while (arr[i] != i)
        
            if (arr[i] != i)
            
                if (arr[i] != arr[arr[i]])//数组中数字是否等于以数字为下标的数字
                
                    Swap(&arr[i], &arr[arr[i]]);
                
                else
                
                    return arr[i];
                
            
        
    
    return 0;

int main()

    int arr[] = 2,3,1,0,2,5,3;
    printf("%d", duplicate(arr, SIZE(arr)));
    return 0;

技术图片总结:数组中数据给定范围之后,可以多利用下标 i 进行求解

以上是关于找出数组中重复的数字(c语言)的主要内容,如果未能解决你的问题,请参考以下文章

c语言怎么判断两个数组中重复数字的个数?

c语言如何判断一个数组中重复元素的个数,并输出这个个数的值?

c语言编程:输出数组中重复出现的数

数组中有一个数字出现次数超过数组长度一半,找出这个数字(用C语言解决)。要求时间复杂度尽量小。

剑指offer-数组——数组中重复的数字

在c语言中输入数组两个数组,查找重复元素并输出怎么写啊