2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N

 我来答
老冯文库
2011-05-02 · 知道合伙人软件行家
老冯文库
知道合伙人软件行家
采纳数:1139 获赞数:8734

向TA提问 私信TA
展开全部
算法思想:先对1..N-1之间的所有整数累加求和,再对数组中的所有元素累加求和;用后者减去前者得到的差就是重复的数字。

参考源代码(C++):

#include "iostream.h"

void main()
{
int arr[] = {6, 2, 3, 4, 3, 5, 1};
int N = 7;
int sum1, sum2;
int i;

for(i=1,sum1=0; i<N; sum1+=i,i++);

for(i=0,sum2=0; i<N; sum2+=arr[i],i++);

cout<<"重复的数字是 "<<sum2-sum1<<endl;
}

时间复杂度:O(n)

算法特点:对于数组中数值的出现顺序不做任何要求,即无需有序(这是二楼算法的缺陷)。
原味三分甜咩
2011-05-02 · 超过28用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:41.7万
展开全部
#include<stdio.h>
#define N 10

int main()
{
int array[N]={1,2,3,4,5,2,6,7,8,9};
int i;
for(i=0;i<N;i++)
{
if(array[i]!=i+1)
break;
}

printf("repeat num is:%2d\n",array[i]);

return 0;
}
如果不进行初始化的话,就还需要一个for循环来初始化,语句为:
for(i=0;i<N;i++)
array[i]=i+1;这样就行了,
具体的算法就是:从1到N-1有n-1个数,所以,重复的数只有一个,而且数组的值有一定的规律,即array[i]=i+1, 那么我们就可以根据这个来找到重复的数据了,即只要前面这个等式不成立,那么这个数就找到了,输出即可。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
adgeafc
2011-05-02 · TA获得超过617个赞
知道小有建树答主
回答量:272
采纳率:100%
帮助的人:366万
展开全部
a[N]中存放了的数的范围是1至N-1吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式