码迷,mamicode.com
首页 > 其他好文 > 详细

在1-10000中随机生成100个数

时间:2015-04-15 13:29:27      阅读:415      评论:0      收藏:0      [点我收藏+]

标签:

题意:在1-10000中随机生成100个数,1-10000已经放在数组中,要求时间和空间都要O(1)。

思路:因为空间要O(1),所以我们可以想到这一定是在原本数组的基础上操作,时间也要O(1)的话,证明我们无法Hash后再判重。所以我们可以这么想用一个指针表示目前已经生成好的随机数,那么这个指针从1开始,每次都从剩下的数中随机取一个和当前指针交换就可以完成了,自己写了代码,有错求指出来。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class Solution {
	private int[]a = new int[10000+5];
	{
		for (int i = 1; i <= 10000; i++) 
			a[i] = i;
	}
	private Random rand = new Random(47);
	
	public ArrayList<Integer> Rand100() {
		ArrayList<Integer> ans = new ArrayList<Integer>();
		int index = 1;
		for (int i = 1; i <= 10000; i++) {
			int ind = index + rand.nextInt(10000-index+1);
			int tmp = a[index];
			a[index] = a[ind];
			a[ind] = tmp;
			ans.add(a[index]);
			index++;
		}
		
		return ans;
	}
    
    public static void main(String[] args) {
    	ArrayList<Integer> list = new Solution().Rand100();
    	for (int i : list)
    		System.out.println(i);
    	Set<Integer> set = new HashSet<Integer>(list);
    	for (int i = 1; i <= 100; i++) {
    		if (set.contains(i) == false) {
    			System.out.println(false);
    			break;
    		}
    	}
    }
}


在1-10000中随机生成100个数

标签:

原文地址:http://blog.csdn.net/u011345136/article/details/45057951

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!