2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N
答案:3 悬赏:20 手机版
解决时间 2021-11-24 19:50
- 提问者网友:書生途
- 2021-11-24 01:33
2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N
最佳答案
- 五星知识达人网友:爱难随人意
- 2021-11-24 01:57
算法思想:先对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
for(i=0,sum2=0; i
cout<<"重复的数字是 "< }
时间复杂度:O(n)
算法特点:对于数组中数值的出现顺序不做任何要求,即无需有序(这是二楼算法的缺陷)。
参考源代码(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
for(i=0,sum2=0; i
cout<<"重复的数字是 "<
时间复杂度:O(n)
算法特点:对于数组中数值的出现顺序不做任何要求,即无需有序(这是二楼算法的缺陷)。
全部回答
- 1楼网友:末日狂欢
- 2021-11-24 02:26
#include
#define N 10
int main()
{
int array[N]={1,2,3,4,5,2,6,7,8,9};
int i;
for(i=0;i {
if(array[i]!=i+1)
break;
}
printf("repeat num is:%2d\n",array[i]);
return 0;
}
如果不进行初始化的话,就还需要一个for循环来初始化,语句为:
for(i=0;i array[i]=i+1;这样就行了,
具体的算法就是:从1到N-1有n-1个数,所以,重复的数只有一个,而且数组的值有一定的规律,即array[i]=i+1, 那么我们就可以根据这个来找到重复的数据了,即只要前面这个等式不成立,那么这个数就找到了,输出即可。
#define N 10
int main()
{
int array[N]={1,2,3,4,5,2,6,7,8,9};
int i;
for(i=0;i
if(array[i]!=i+1)
break;
}
printf("repeat num is:%2d\n",array[i]);
return 0;
}
如果不进行初始化的话,就还需要一个for循环来初始化,语句为:
for(i=0;i
具体的算法就是:从1到N-1有n-1个数,所以,重复的数只有一个,而且数组的值有一定的规律,即array[i]=i+1, 那么我们就可以根据这个来找到重复的数据了,即只要前面这个等式不成立,那么这个数就找到了,输出即可。
- 2楼网友:西岸风
- 2021-11-24 02:14
a[N]中存放了的数的范围是1至N-1吗?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯