已知一个数组random[99],其中包含从1-100中随机抽取的99个不重复的自然数

本文介绍了一种解决面试题的方法,该题要求从1到100生成随机且不重复的整数。通过使用Java实现,首先利用Random获取随机数,然后通过TreeSet确保整数不重复。最后通过数学公式计算缺失的整数,从而解决题目要求。

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

这是一道简单的面试题,我本着是否能找出更好的方法来,在网上找了很多别人的方法,把code都copy下来运行,发现还是有错误.所以自己就写了一个累赘的例子,不过不会有错.
思路:采用Random得到1-100的随机数(因为Random取值是0<=a<1之间的数,所以采用了一个三目运算),这个面试题的难点是取出1-100中随机而又不重复的整数.然后用1-100的总和减去99个随机数的总和,这样就得到了未放进的数.
package random;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.SortedSet;
import java.util.TreeSet;

public class RandomTest2 {

public int[] array = new int[99];
private Object[] array1;
private int tmp;
int sum = 0;

public void init() {
Random random = new Random();

SortedSet set = new TreeSet();//根据其特性,set集合中不会保存重复的元素
for (int i = 0; i >= 0; i++) {
if (set.size() > 98) {
break;
}
tmp = random.nextInt(100);//得到1-100中的99个随机数
tmp = tmp == 0 ? 100 : tmp;//将得到0转换成100
set.add(tmp);
}
List list = new ArrayList();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
list.add(iterator.next());
}
array1 = list.toArray();
}

public void getArray() {
for (Object ii : array1) {
int a = Integer.parseInt(ii.toString());
sum += a;
}
System.out.println(5050 - sum);
}

public static void main(String[] args) {
for (int i = 0; i < 101; i++) {
RandomTest2 rt = new RandomTest2();
rt.init();
rt.getArray();
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值