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

题意:在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;
    		}
    	}
    }
}
时间: 2024-12-28 01:32:13

在1-10000中随机生成100个数的相关文章

java中随机生成汉字

main方法中使用: //随机生成100个汉字 String ss=""; for(int i=0;i<100;i++){ ss+=getChinese(i); } System.out.println(ss); 结果如图: //随机生成汉字//seed指定Random(long seed)中的种子数public static String getChinese(long seed) throws UnsupportedEncodingException{ String str=

shell &nbsp; 随机生成10个数,找出最大值

分析:随机生成10个数?  生成随机数,这里用RANDOM函数,我把生成的这10个数定义为一个数组array,定义MAX的初始值为array[0] 使用for循环进行与每一个元素的值进行比较,如果有比array[0]大的,假如array[3]比array[0]大,那么就把array[3]的值赋值给MAX,遍历比较每个数组元素,最后输出MAX的值即可! 看看执行情况....                      文本 #!/bin/bash #Author:wangergui       Em

随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中

设计思路: 1.使用random随机产生10个数,存入数组中 2.使用for循环把结果存入一个String对象中 3.使用for循环求出数组中所有元素的和 4.使用JTextArea和JOptionPane输出数组的内容 程序流程图: 源程序代码: import javax.swing.*; public class InitArray { public static void main( String args[] ) { String output = ""; int num=0;

关于2048小游戏中随机生成2与4个数的问题

public class InitNumer { Random random = new Random(); public InitNumer() { super(); } /** * 随机生成一个二维数组,并指定生成的2与4的个数 * @param rowAndCol 二维数组的宽与高 * @param numberOf2 数字2的个数 * @param numberOf4 数字4的个数 */ public int[][] randomGetNumber(int rowAndCol, int

题:统计数字出现次数。 随机生成100个数字,数字范围从1到10,统计每个数字出现的次数并打印到控制台。

public static void main(String[] args) { printCount(getNumList());} private static ArrayList<Integer> list; public static ArrayList<Integer> getNumList() { list = new ArrayList<Integer>(); Random r = new Random(); for (int i = 0; i <

java中随机生成字符串的方法(三种)

1.生成的字符串每个位置都有可能是str中的一个字母或数字,需要导入的包是import java.util.Random; //length用户要求产生字符串的长度 public static String getRandomString(int length){ String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random=new Random(); StringB

随机生成两个数的四则运算

Github项目地址: https://github.com/123diandian/sizeyunsuan PSP: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 20 Estimate 估计这个任务需要多少时间 1440 2200 Development 开发 700 200 Analysis 需求分析 (包括学习新技术) 180 100 Design Spec 生成设计文档 5 5 Desi

python内置的一个好玩的函数-zip,并且巧妙的实现按概率随机生成有限个数的字符串。

python有一个比较有意思的内置函数-----zip,可以把传入的两组list进行一个组合变形,再输出子元素为tuple的list,不过变形的方式比较抽象. 举个例子: A=[1,2,3,4,5,6] B=['a','b','c','d'] v1=zip(A,B) v1的结果为: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')] 比较直观的理解就是,A和B是两道拉链上的扣子,生成的list的子tuple,每一组tuple就是一对扣好了的扣子,并且从每组list的

JS随机生成100个DIV每10个换行(换色,生成V字和倒V)

附图 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 #content{margin:20px auto 0px;} 8 .d2{width:50px;height:50px;color:white;text-align: cent