Fork me on GitHub

997.找到小镇的法官

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;
}
posted @ 2019-07-08 12:55  cznczai  阅读(159)  评论(0编辑  收藏  举报