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