转眼又相隔一个多月,优快云账户要求我原手机验证码验证是问题之一,懒是问题之二,哈哈... (言归正传)
今天我给大家分享点什么呢?
分享一道我遇到的题吧:
【题目】12只球队,6个场地,11天打完比赛,要求每个球队与其他球队都能比赛一场并且每天每只球队只上场一次。算11天比赛的赛程安排表?
比赛场数= 队数*(队数-1)/2 即总场数为66次,每天6场也就刚好打11天
方法一:固定轮转编排法
固定轮转法也叫常规轮转法,是我国传统的编排方法。它以左边第一号固定不动,逆时针转动,逐一排出。
@Test public void test() { String [] team = {"1","2","3","4","5","6","7","8","9","10","11","12"};//参赛的各队 int len = team.length; for(int i=1;i< len;i++) { System.out.println(); System.out.println("第"+i+" 轮"); for(int j=0;j< len/2;j++) { System.out.println(team[j]+" ----- "+ team[len-1-j]); } String temp=team[len-1]; // 将最后一队的值赋给临时变量temp for(int k=len-1;k>0;k--) { team[k]=team[k-1]; team[1]=temp; // 将临时变量temp赋给数组的第二值 } } }
方法二:“贝格尔” 编排法
从1985年起,世界性比赛多采用“贝格”“编排法。其优点是单数队参加时可避免第二轮的轮空队从第四轮起每场都与前一轮的轮空队比赛的不合理现象。
采用“贝格尔”编排法,编排时如果参赛队为双数时,把参赛队数分一半(参赛队为单数时,最后以“0”表示形成双数),前一半由1号开始,自上而下写在左边;后一半的数自上而下写在右边,然后用横线把相对的号数连接起来。这即是第一轮的比赛。
第二轮将第一轮右上角的编号(“0”或最大的一个代号数)移到左角上,第三轮又移到右角上,以此类推。 即单数轮次时“0”或最大的一个代号在右上角,双数轮次时则在左上角。
参考博文:https://blog.youkuaiyun.com/lvjiankui_wwx/article/details/28275565
===== O(∩_∩)O哈哈~,可能看到这儿有人想骂我,又尼玛copy别人的博文。【我不copy就遇不到优秀的你】 =====
总结一下常遇到的知识点吧:
(1) 尽量避免过多过常地创建java对象。例:循环中new对象
(2) equest 与 == 的区别。equest比较的是对象值 ==比较的是对象地址,==的话必equest,==比equest快。
(3) instanceof 用法。例:String a = "1"; if (a instanceof String){ // 输出 true } 等...
(4) 尽量使用局部变量。调用方法传递的参数以及调用创建的临时变量都保存在栈中,速度快。而静态、实例变量都保存在堆中创建,速度较慢。
(5) 尽量不要使用finalize方法。由于GC工作量很大,尤其是回收Young代内存时,大都会引起应用程序暂停。而什么时候易出现GC异常呢?当项目热启动时易出现
(6) final,finalize和finally的区别。final关键字可以用于类,方法,变量前,用来表示该关键字修饰的类,方法,变量具有不可变的特性。finalize方法来自于java.lang.Object,用于回收资源。finally当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。