1—N 一一对应 且不重复

import java.util.HashMap;

import java.util.Random;
import java.util.Scanner;

public class UniqueAndRandom implements  Runnable{
 static HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
 static int times=0;
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
           int hpSum=0;
           int maxNumber;
           Scanner input=new Scanner(System.in);
           System.out.println("输入最大的整数: ");
           maxNumber=input.nextInt();
           initHash(maxNumber);
        for(int i=0;i<maxNumber;i++)
        {
        	int previousHpSum=hpSum;
        	UniqueAndRandom ur=new UniqueAndRandom();
        	//ur.run();
      	int temp=getOnce(maxNumber);
      
       hpSum+=temp;
  	System.out.println(temp+"\t"+temp+"+"+previousHpSum+"="+hpSum+"\t"+times);
  
        }
    System.out.println(hpSum+"--结果:--"+ test(maxNumber));
    
	}
	private static synchronized int getOnce(int maxNum)
	{
		Random rd=new Random();
		int temp=rd.nextInt(maxNum+1);
	
		if(temp==0) 
		{
			temp++;
		}
		if(map.get(temp)==-1)
		{
			
			return getOnce(maxNum);
		}
		else
		{
			times++;
			int t2= map.get(temp);
			map.put(temp, -1);
			
			return t2;
		}
	}
	
	public static void initHash(int maxNum)
	{
		for(int i=1;i<=maxNum;i++)
		{
			map.put(i, i);
		}
	}
   private static int test(int maxNum)
   {
	   int sum=0;
	   for(int i=1;i<=maxNum;i++)
	   {
		   sum=sum+i;
	   }
	   return sum;
   }
@Override
public void run() {
	// TODO 自动生成的方法存根
	
	getOnce(19999);
}


	

}

   最近同学做一个项目,遇到一个问题。要从1-N中抽N个数,而且N个数个个不同,刚开始我觉得蛮简单的,下面我将自己的代码贴上,希望有人能够不用递归做出来一样的效果,并做到N比如大到10W 不会出现内存溢出的问题。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值