从数组中随机取若干个不重复的数

要求:从 0 ~ 100 中随机取出十个不重复的 数

思路:

1: 利用数组,通过Math.random()*(arr.length -1)  然后将取到的数跟数组最后一个元素交换,将数组长度减一

下面代码中设计到 判断数组中是不是有重复元素 我的想法如下,如有错误还望大佬指正

1:如果数据量不大利用  HashSet的去重效果,将数组中的元素循环放入 Set之后判断set.size 和 数组长度是否相等

2:利用循环比较 第二个直接跟第三个开始比,依次类推 

package I_Chap3;

import java.util.HashSet;
import java.util.Set;

public class Random_norepeat_arithmetic {
    public static void main(String[] args) {
        int[] arr = new int[100];
        for (int i=0;i<100;i++){
            arr[i] = i;
        }

        
        int[] rel = new int[10];
        int len = arr.length;
        double index;
        int int_index;
        for(int i=0;i<10;i++){
            index = Math.random()*len;
            // 将 double 类型的 数字转换成 int 并且不损失精度
            int_index = (int)index;
            rel[i] = arr[int_index];
            swap(arr,int_index,len-1);
            len--;
        }

//        for(int temp:rel){
//            System.out.println(temp);
//        }
        boolean flag = judge2(arr);
        if(flag == true){
            System.out.println("true");
        }else{
            System.out.println("false");
        }

    }

    public static void swap(int[] a,int start,int end){
        int temp;
        temp = a[start];
        a[start] = a[end];
        a[end] = temp;
    }

    /*
     判断 数组中是不是存在重复的元素
     1:利用 Hashset 因为 set 有去重的效果 把所有的元素放到 set 中 然后判断set 的长度是不是跟 数组长度相等

     2:如果数组非常大,可以用时间来换取空间,上面这种办法则不可取

     */
    public static Set<Integer> set = new HashSet<Integer>();
    public static boolean judge(int[] arr){
        set.clear();
        if(arr.length == 0){
            return true;
        }else{
            for(int a:arr){
                set.add(a);
            }
            if(set.size() == arr.length){
                return true;
            }else{
                return false;
            }
        }
    }


    /*
        两两相比需要  n^2

        比过了就不再比,减少比较的次数   比如第二个直接跟第三个开始比 第三个直接开始跟第四个开始比  一直比到倒数第二个就OK
     */
    public static boolean judge2(int[] arr){
        outer:
        for(int i=0;i<arr.length -1;i++){
            for(int j = i+1;j< arr.length ;j++){
                if(arr[j] == arr[i]){
                    return false;
                }
            }
        }
        return true;
    }

}















 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 PHP 中的 array_rand() 函来从数组中随机一个。该函接受一个组作为参,并返回随机选择的键。可以使用这个键来访问数组中相应的值。 例如,假设有一个包含字的组 $numbers,你可以使用以下代码从中随机选择一个: ``` $numbers = array(1, 2, 3, 4, 5); $random_key = array_rand($numbers); $random_number = $numbers[$random_key]; echo $random_number; ``` 这将输出数组中的一个随机。 ### 回答2: 在PHP中,我们可以使用rand()函从一个数组中随机一个。 首先,我们需要创建一个包含要随机选择的组。可以使用以下语法创建一个包含任意组: $numbers = array(1, 2, 3, 4, 5, 6); 然后,我们可以使用rand()函来生成一个随机的索引,以在数组中选择一个。rand()函的语法是rand(min, max),其中min和max是要生成随机的范围。 在我们的例子中,使用count()函组的长度,然后将该长度作为max参传递给rand()函,以保证随机索引的范围在组长度范围内。 最后,我们使用选定的随机索引来访问数组中,并将其存储在一个变量中以供后续使用。 下面是一个完整的代码示例: $numbers = array(1, 2, 3, 4, 5, 6); $randomIndex = rand(0, count($numbers) - 1); $randomNumber = $numbers[$randomIndex]; 通过以上代码,我们可以获得一个随机选择的,并将其存储在$randomNumber变量中。你可以根据自己的需求适当调整组的内容和大小。 ### 回答3: 在PHP中,可以使用array_rand()函数组中随机一个。 array_rand()函接受一个组作为参,并返回数组中随机键名。可以通过随机键名来获数组中对应的值。 以下是一个示例代码: ```php <?php $numbers = array(1, 2, 3, 4, 5); $randomKey = array_rand($numbers); $randomNumber = $numbers[$randomKey]; echo "随机:" . $randomNumber; ?> ``` 在上述示例中,我们定义了一个包含5个字的组$numbers。然后,使用array_rand()函数组中随机一个键名,并存储在$randomKey变量中。最后,通过$randomKey找到对应的值,并赋值给$randomNumber变量。最后,我们输出$randomNumber的值,即随机。 需要注意的是,array_rand()函返回的是键名而不是值,因此在我们获随机前,需要使用随机键名来找到对应的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值