找出数组中重复的数字(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语言如何判断一个数组中重复元素的个数,并输出这个个数的值?