package com.interview.books.question300; import com.interview.utils.ConsoleWriter; /** * Created_By: stefanie * Date: 14-12-15 * Time: 下午5:04 */ public class TQ11_MatchRanking { public int[] getRank(int[][] scores, int[] order){ int[] rank = new int[order.length]; int step = order.length; while(step > 1){ for(int k = 0; k < order.length; k += step){ for(int i = 0; i < step; i += 2){ int first = order[k + i]; int second = order[k + i + 1]; int winner = scores[first][second]; int loser = winner == first? second : first; rank[k + i/2] = winner; rank[k + i/2 + step/2] = loser; } } step /= 2; order = rank; } return rank; } public static void main(String[] args){ TQ11_MatchRanking ranker = new TQ11_MatchRanking(); /** * 0 0 2 0 * 0 1 1 1 * 2 1 2 2 * 0 1 2 3 * */ int[][] w = new int[][] {{0, 0, 2, 0}, {0, 1, 1, 3}, {2, 1, 2, 2}, {0, 3, 2, 3}}; int[] order = new int[] {0, 1, 2, 3}; int[] rank = ranker.getRank(w, order); ConsoleWriter.printIntArray(rank); //{2, 0, 1, 3}; order = new int[] {3, 0, 2, 1}; rank = ranker.getRank(w, order); ConsoleWriter.printIntArray(rank); //0, 1, 2, 3 } }