public int findJudge(int N, int[][] trust) { if( N==1 && trust.length==0) { return 1; } if (trust.length != 0) { // arr用于投票记录 int arr[] = new int[10000]; // temp用于记录最大值 //x 记录谁是可能法官 // bol 判断是不是有多个N-1的值 int temp = arr[0]; int x = 1; int bol = 0; // 所有人的结果读入 只是读入投票人选出的对象 int length = trust.length; int wide = trust[0].length; for (int i = 0; i < length; i++) { int y = trust[i][wide - 1] - 1; arr[y]++; } // 进行判断 看是不是合适答案 for (int i = 0; i < N; i++) { // 记录最大值的下标 也就是法官的号数 if (arr[i] > temp) { temp = arr[i]; x = i + 1; } if (arr[i] == N - 1) { bol++; } } // 如果票数不是N-1或者 多个同样的票数则return-1 if (temp != N - 1 || bol != 1) { return -1; } // 筛选条件二 else { // 是那个符合条件的人是否还投票 for (int i = 0; i < length; i++) { if (trust[i][0] == x) return -1; } } return x; } else { return -1; } }
其他的解法:
public int findJudge(int N, int[][] trust) { int[] truster = new int[N+1]; int[] trustee = new int[N+1]; for (int[] pair : trust) { truster[pair[0]]++;//统计投票人被投票情况 trustee[pair[1]]++;//统计投票人投给谁 } for (int i = 1; i <= N; i++) { if (truster[i] == 0 && trustee[i] == N-1) { return i; } } return -1; }