leetcode练习题-997. 找到小镇的法官

た 入场券 2023-07-24 11:30 20阅读 0赞
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. /**
  5. * 在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。
  6. * <p>
  7. * 如果小镇的法官真的存在,那么:
  8. * <p>
  9. * 小镇的法官不相信任何人。
  10. * 每个人(除了小镇法官外)都信任小镇的法官。
  11. * 只有一个人同时满足属性 1 和属性 2 。
  12. * 给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。
  13. * <p>
  14. * 如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。
  15. * <p>
  16. * 示例 1:
  17. * <p>
  18. * 输入:N = 2, trust = [[1,2]]
  19. * 输出:2
  20. * 示例 2:
  21. * <p>
  22. * 输入:N = 3, trust = [[1,3],[2,3]]
  23. * 输出:3
  24. * 示例 3:
  25. * <p>
  26. * 输入:N = 3, trust = [[1,3],[2,3],[3,1]]
  27. * 输出:-1
  28. * 示例 4:
  29. * <p>
  30. * 输入:N = 3, trust = [[1,2],[2,3]]
  31. * 输出:-1
  32. * 示例 5:
  33. * <p>
  34. * 输入:N = 4, trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]
  35. * 输出:3
  36. * <p>
  37. * https://leetcode-cn.com/problems/find-the-town-judge/
  38. */
  39. class Solution {
  40. /**
  41. * 出度为0,并且入度为N-1
  42. *
  43. * @param N
  44. * @param trust
  45. * @return
  46. */
  47. public int findJudge(int N, int[][] trust) {
  48. int[] outDegress = new int[N + 1];
  49. int[] inDegress = new int[N + 1];
  50. for (int i = 0; i < trust.length; i++) {
  51. int first = trust[i][0];
  52. int second = trust[i][1];
  53. outDegress[first]++;
  54. inDegress[second]++;
  55. }
  56. for (int i = 1; i <= N; i++) {
  57. if (outDegress[i] == 0 && inDegress[i] == N - 1) {
  58. return i;
  59. }
  60. }
  61. return -1;
  62. }
  63. }
  64. public class MainClass {
  65. public static int[] stringToIntegerArray(String input) {
  66. input = input.trim();
  67. input = input.substring(1, input.length() - 1);
  68. if (input.length() == 0) {
  69. return new int[0];
  70. }
  71. String[] parts = input.split(",");
  72. int[] output = new int[parts.length];
  73. for (int index = 0; index < parts.length; index++) {
  74. String part = parts[index].trim();
  75. output[index] = Integer.parseInt(part);
  76. }
  77. return output;
  78. }
  79. public static int[][] stringToInt2dArray(String input) {
  80. JsonArray jsonArray = JsonArray.readFrom(input);
  81. if (jsonArray.size() == 0) {
  82. return new int[0][0];
  83. }
  84. int[][] arr = new int[jsonArray.size()][];
  85. for (int i = 0; i < arr.length; i++) {
  86. JsonArray cols = jsonArray.get(i).asArray();
  87. arr[i] = stringToIntegerArray(cols.toString());
  88. }
  89. return arr;
  90. }
  91. public static void main(String[] args) throws IOException {
  92. BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  93. String line;
  94. while ((line = in.readLine()) != null) {
  95. int N = Integer.parseInt(line);
  96. line = in.readLine();
  97. int[][] trust = stringToInt2dArray(line);
  98. int ret = new Solution().findJudge(N, trust);
  99. String out = String.valueOf(ret);
  100. System.out.print(out);
  101. }
  102. }
  103. }

发表评论

表情:
评论列表 (有 0 条评论,20人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ZR#997

    ZR\997 解法: > 找找规律就出来了,全场最简单的一道题。 CODE: include<iostream> include<cstdi...

    相关 997. 找到小镇法官

    在一个小镇里,按从 `1` 到 `N` 标记了 `N` 个人。传言称,这些人中有一个是小镇上的秘密法官。 如果小镇的法官真的存在,那么: 1. 小镇的法官不相信任何人。

    相关 ZROI#997

    [ZROI\997][ZROI_997] 这是某场\\(CF(Div.3)\\)的\\(C\\)题.我当时是选择了现场码. 因为那场\\(CF\\)我没打.这个题我当时