关于求1001个数中的重复数的问题

本文介绍了一种在含有1001个元素的数组中寻找唯一重复数字的算法,该数组包含1到1000的整数且仅有一个数字重复。通过随机化数组并遍历一次来找出重复项。

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

题目描述:
1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现
一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空
间,能否设计一个算法实现?
莫贝特提供的算法是:用1001个数组元素的和减去1-1000的和(即n*(n-1)/2)。
我想如果用于求和的sum变量不算辅助存取空间的话。那么用散列的思想效率更高,因为在大多数情况下,不用遍历
整个数组就可以找到重复的数字。
代码:
ContractedBlock.gifExpandedBlockStart.gifCode
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;

namespace study
{
    
class Program
    {
        
static void Main(string[] args)
        {
            
const int len=20;
            
int[] x = new int[len+2];
            
int i,j,k,t;
            Random rand
=new Random();
            
for (i = 1; i < len+1; i++) x[i] = i;
            x[len 
+ 1= rand.Next(1, len);
            j 
= 1; k = len + 1;
            x[
0= x[j];
            x[j] 
= x[k];
            x[k] 
= x[0];
            
for (i = 0; i <len; i++//随机化
            {
                j 
= rand.Next(1, len+1);
                k 
= rand.Next(1, len + 1);
                x[
0= x[j];
                x[j] 
= x[k];
                x[k] 
= x[0];
            }

            j 
= 1;
            
while (true)
            {
                
if (x[j] == -1)
                {
                    Console.WriteLine(
"is :{0}", j);
                    
break;
                }
                
else
                {
                    k 
= j;
                    j 
= x[j];
                    x[k] 
= -1;
                }


            }

            Console.ReadLine();
        }
    }

}

转载于:https://www.cnblogs.com/webtrados/archive/2009/07/22/1528288.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值