1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次
来源:百度文库 编辑:神马文学网 时间:2024/04/20 09:01:27
1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现
一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空
间,能否设计一个算法实现?
将1001个元素相加减去1,2,3,……1000数列的和,得到的差即为重复的元素。
int Find(int * a)
{
int i;//变量
for (i = 0 ;i<=1000;i++)
{
a[1000] += a[i];
}
a[1000] -= (i*(i-1))/2 //i的值为1001
return a[1000];
}
利用下标与单元中所存储的内容之间的特殊关系,进行遍历访问单元,一旦访问过的单
元赋予一个标记,利用标记作为发现重复数字的关键。代码如下:
void FindRepeat(int array[], int length)
{
int index=array[length-1]-1;
while ( true )
{
if ( array[index]<0 )
break;
array[index]*=-1;
index=array[index]*(-1)-1;
}
cout<<"The repeat number is "<
此种方法不非常的不错,而且它具有可扩展性。在坛子上有人提出:
对于一个既定的自然数 N ,有一个 N + M 个元素的数组,其中存放了小于等于 N 的所有
自然数,求重复出现的自然数序列{X} 。
对于这个扩展需要,自己在A_B_C_ABC(黄瓜儿才起蒂蒂)的算法的基础上得到了自己的算法
代码:
按照A_B_C_ABC(黄瓜儿才起蒂蒂)的算法,易经标记过的单元在后面一定不会再访问到,除非它是重复的数字,也就是说只要每次将重复数字中的一个改为靠近N+M的自然数,让遍历能访问到数组后面的单元,就能将整个数组遍历完。
代码:
*/
void FindRepeat(int array[], int length, int num)
{
int index=array[length-1]-1;
cout<<"The repeat number is ";
while ( true )
{
if ( array[index]<0 )
{
num--;
array[index]=length-num;
cout<
if ( num==0 )
{
cout<
}
array[index]*=-1;
index=array[index]*(-1)-1;
}
}
1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次
判断数组元素是否存在重复,要求时间复杂度为O(1)
牛排含有丰富的人体所需元素
在Web页面中控制其元素的选择状态
在Web页面中控制其元素的选择状态
文件描述符集fd_set * readfds;书上这样描述数组元素的每一位对应一个文件描述...
长尾元素的组合: 一个藏袍
寻找生活中积极的元素
汉字的书写元素和构形元素
“感动”的时尚元素
新奇的饮食元素
WBS的构成元素
笑的元素
元素的组成
性欲的四大元素
中国元素的结晶
成功的必要元素
煤的元素组成
不可忽视的技术元素
十二生肖的动情元素
使用list的成员函数push_back和push_front插入一个元素到list中_永...
(转)让宝宝在体态律动中感受音乐的结构和元素
(转)让宝宝在体态律动中感受音乐的结构和元素
人体必须的常量元素1