打乱一个1~100的数组(睡眠算法)

mac2024-03-17  24

题目

题目的大意就是:打乱一个1~100的数组(每个数打乱的概率要相同)

一、等待取票

面试完静下来想了想,能不能有其他好的解法,然后第一种想法竟然是类似“睡眠排序”。

我的思路:去动物园排队,100个人,去盒子里取号,根据号码顺序入场。

如何设置这个盒子:获取🎫的规则,随机生成。

public class Main { public static void main(String[] args) { TicketThread[] tt = new TicketThread[101]; for (int i = 1; i < 101; i++) { tt[i] = new TicketThread(i); } for (int i = 1; i < 101; i++) { tt[i].start(); } } } class TicketThread extends Thread{ private int val = 0; int max = 100; int min = 0; public TicketThread(int val){ this.val = val; } public void run(){ try { sleep((int) (Math.random()*(max-min)+min)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(val); } }

二、交换门票

第二种方法我回会宿舍的路上想到的,就是“交换门票”。

思路:按顺序发了门票,然后闭着眼睛两两交换,每个人必须主动交换一次。(包括与自己)

如何交换:生成1—100的随机数,和站在那的人交换。(交换的是两个位置的人手中的票,不是交换对应的号码)

public class Main { public static void main(String[] args) { int[] tt = new int[100]; int max = 100; int min = 0; for(int i = 0;i < tt.length;){ tt[i] = ++i; } for(int i = 0;i < tt.length;++i){ int ran = (int) (Math.random()*(max-min)+min); int temp = tt[i]; tt[i] = tt[ran]; tt[ran] = temp; } for(int x : tt){ System.out.println(x); } } }
最新回复(0)