某个公司举行一场羽毛球赛,有1001个人参加,现在为了评比出“最厉害的那个人”,进行淘汰赛,请问至少需要进行多少次比赛。
/** * 某个公司举行一场羽毛球赛,有1001个人参加,现在为了评比出“最厉害的那个人”, * 进行淘汰赛,请问至少需要进行多少次比赛。 * @author 健身小码哥 * */ public class BestPlayer { /** * 递归求解比赛场次 * @param playerCount * @return */ public int getMinGameCount_Recursively(int playerCount) { if(playerCount <= 1) { return 0; } if(playerCount == 2) { return 1; } return (playerCount % 2 == 0) ? (playerCount/2 +getMinGameCount_Recursively(playerCount/2)): (playerCount/2 +getMinGameCount_Recursively(playerCount/2 + 1)); } /** * 递归求解比赛场次 * @param playerCount * @return */ public int getMinGameCount_Iteratively(int playerCount) { if(playerCount <= 1) { return 0; } if(playerCount == 2) { return 1; } int minArray[] = new int[playerCount+1]; minArray[0] = 0; minArray[1] = 0; minArray[2] = 1; for(int i = 3 ; i <= playerCount ; i++) { minArray[i] = i % 2 == 0 ? minArray[i/2] * 2 + 1 : minArray[i/2] * 2 + 2; } return minArray[playerCount]; } public static void main(String[] args) { int min = new BestPlayer().getMinGameCount_Iteratively(1001); System.out.println(min); } }