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

该博客介绍了一种解决数组中重复数字的问题,要求时间复杂度为O(n)且空间复杂度为O(1)。通过遍历数组,将每个元素与其下标进行比较,若不相等则交换,直到找到重复的数字或完成循环。提供的C语言代码实现了这个算法,并在main函数中进行了测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

733bd718da7b904fe2f0fc77f94eeee9.gif让人瑟瑟发抖的面试题

来我们看一下题目

在一个 长度为n的数组里的所有数字都在0~n-的范围内。数组中某些数字是重复的,但不知道有几个数字重复伦理,也不知道每个数字重复了多少次,找出任意一个重复的数字

注意:时间复杂度O(n),空间复杂度O(1)

f2714681faea6a77544d304aca068a70.gif怎么解决勒???

分析:利用题目中0~n-1范围,可以运用数组下标和数组内容进行比较

if (arr[i] != arr[arr[i]]),如果不相等时,进行调换,相等时,直接返回值

a3267440c3c56ded3190f9dee5266970.gif来看看代码

#include

#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;

}

a208e20944927e90db46bbb13fa01b2e.gif总结:数组中数据给定范围之后,可以多利用下标 i 进行求解

原文:https://blog.51cto.com/14233078/2436533

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值