问题描述
在面试中被问到的算法题,不知道如何回答,请各位大侠帮帮忙~~再次谢谢了!1.有54张扑克牌,使用什么算法能最优的平均分个3个人并且分到的牌比较均匀。不能使用Random。。2.100个数,把99个数存储到同个数组中,使用什么算法能最快的找出没有被存储到数组的那个数?
解决方案
解决方案二:
1.个人感觉还是再问下面试官什么叫最优的平均分。。。2.把100个数求和再遍历数组一次,做减法就行了或者hash
解决方案三:
1.这个可以用吧intid=(int)(System.currentTimeMillis()%54);2.100个数中有没有重复数?
解决方案四:
路过接分!!!!!!!!!!!!!!!!!!!!!
解决方案五:
//2/**产生坠机数*/staticjava.util.Randomrand=newjava.util.Random();publicstaticvoidmain(String[]args){int[]t1=newint[100];for(inti=0;i<100;i++){t1[i]=i+100;}rand(t1);printf(t1);int[]t2=newint[99];System.arraycopy(t1,0,t2,0,t2.length);rand(t2);printf(t2);System.out.println("原数:"+t1[t1.length-1]);intre=find(t1,t2);System.out.println("找到:"+re);}/**解*/publicstaticintfind(int[]t1,int[]t2){if(t1.length<t2.length){int[]buf=t1;t1=t2;t2=buf;}intre=t1[t1.length-1];for(inti=t2.length-1;i>-1;i--){re+=t1[i]-t2[i];}returnre;}/**将da随机排列*/staticvoidrand(int[]da){for(inti=da.length-1,j;i>1;i--){//随机排列j=rand.nextInt(i);da[i]^=da[j];//交换值da[j]^=da[i];da[i]^=da[j];}}/**打印,显示用*/staticvoidprintf(int[]da){System.out.print("[");for(inti=0;i<da.length;i++){System.out.print(da[i]);if(i<da.length-1){System.out.print(",");}else{System.out.println("]");}}}
解决方案六:
///忘记帖结果了,遍历一次就可以找到了/**run:[167,149,123,153,168,121,133,105,162,117,140,169,109,195,128,110,104,159,164,112,178,130,174,170,137,187,147,173,143,180,132,134,120,114,150,197,142,146,118,113,151,165,148,141,183,172,186,138,185,190,108,136,116,139,198,166,191,102,124,145,158,107,177,122,160,182,126,152,115,181,144,189,125,135,161,156,119,193,155,175,199,131,171,129,127,106,103,100,194,157,163,184,101,188,176,196,192,154,111,179][143,146,109,120,148,186,103,153,159,139,176,102,184,160,135,177,157,119,156,122,131,132,101,124,190,111,185,163,154,194,181,125,173,129,174,191,106,189,187,195,196,164,170,171,180,188,112,169,126,175,130,108,198,152,128,123,168,113,166,165,178,162,149,115,150,193,107,151,118,192,145,147,172,104,182,100,183,167,199,127,114,197,142,137,121,105,144,110,138,155,134,117,116,140,133,136,141,161,158]原数:179找到:179成功生成(总时间:0秒)*/