主题:  判断重复数

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#12004/11/25 1:16:44
比如有一个数组1——100,数组里的数必须是1--100的数字,并且不能有重复,怎样判断算法好一些。


非常大鱼

不是高手

职务:普通成员
等级:3
金币:5.0
发贴:1352
#22004/11/25 8:27:36
对,我也碰到过类似问题,产生一堆在一定范围内的随机数,不能重复,不知道哪种算法好点。



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#32004/11/25 14:49:11
最笨的办法是二个循环
for (int i = 0; i < array.Length; i++)
{
    found = false
    for (int j = 0; j < array.Length; j++)
    {
        if (array[j] == i + 1)
        {
            found = true;
            break;
        }
    }
    
    if (!found)
    {
        return false;
    }
}

其次,用一个临时数组,把找到的一个加入到临时数组中,并把数组的该数字去掉,可以少些循环。问题是数组去掉一个数字也并不容易,需要把后面的数字往前移动1。是否不用数组而用链表。c#中的ArrayList不知怎样。

另外,是否把它看成一个排序的问题,排序完成后,只要后面的数字比前面大1就可以了。


非常大鱼

panliu888

职务:普通成员
等级:1
金币:0.0
发贴:26
#42004/11/25 21:24:24
要是索引1-100 , 值也是1-100随机, 那真的是随机排序的问题了
可以这样: ps别的语言不太了解,我用JS示例

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]


要是取50个,那就截前50个成了

不过按照常理 , 应该是,随机取出一个数, 并从数组中移除这一项, 也就是这样

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]


拙见。勿笑



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#52004/11/26 0:49:46
你是先把数字填入数组,再打乱,也是种方法。


非常大鱼