某笔试题的低效解法


package algorithm;

import java.util.ArrayList;
/**
* @author jupiterpan 2009-12-16
*
*/
public class PlayRoundII {
private ArrayList<Integer>[] array ;
private int count;
private int playerNo;
public PlayRoundII(){
}
public PlayRoundII(int n){
setPlayerNo(n);
count = 0;
}
@SuppressWarnings("unchecked")
private void initTeam(){
array = new ArrayList[playerNo/2];
for(int i=0;i<(playerNo/2);i++){
array[i] = new ArrayList<Integer>();
}
array[0].add(1);
array[playerNo/4].add(2);
array[playerNo/8].add(3);
array[playerNo/4+playerNo/8].add(4);
}
private void addPlayer(int n){
for(int i=0; i<playerNo/2; i++){
if(array[i].size()!=2){
array[i].add(n);
if(n==playerNo){
for(ArrayList<Integer> al:array){
System.out.print(al+" ");
}
System.out.println(++count);
}
else{
addPlayer(n+1);
}
array[i].remove(array[i].size()-1);
}
}
}
public void setPlayerNo(int n){
int m = n;
if (m<8){
System.out.println("set player's number correctly:(2^n,n>=3)");
return;
}
while((m>1)&&(m==(m>>1)<<1))m=m>>1;
if (m!=1){
System.out.println("set player's number correctly:(2^n,n>=3)");
return;
}
playerNo = n;
initTeam();
}
public void show(){
if(playerNo!=0){
addPlayer(5);
}
}
public static void main(String[] args){
new PlayRoundII(8).show();
}
}


说真的,这么写很低效,16个人我的机子跑了1个半小时才结束,原题的32人不知要多久。。。
谁有好的方法请告之啊!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值