关注
class Main5 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<String> list = new ArrayList<>(); while (scanner.hasNext()) { String line = scanner.nextLine(); list.add(line); if (!line.endsWith(",")) { break; } } TreeSet<String> set = new TreeSet<>(); for (String pair : list) { String[] tmp = pair.split(",|\\{|\\}"); AddDependency(tmp[1].trim(), tmp[2].trim()); set.add(tmp[1].trim()); set.add(tmp[2].trim()); } int i = 0; for (String str : set) { if (i == set.size() - 1) { System.out.println("{" + str + ", " + MouldIsCircularDependency(str) + "}"); } else { i++; System.out.println("{" + str + ", " + MouldIsCircularDependency(str) + "},"); } } } static Map<String, ListNode> map1 = new HashMap<>(); static Map<String, ListNode> map2 = new HashMap<>(); public static void AddDependency(String moduleId, String dependModuleId) { if (map1.containsKey(moduleId)) { if (map2.containsKey(dependModuleId)) { ListNode l1 = map1.get(moduleId); ListNode l2 = map2.get(dependModuleId); l1.next = l2; } else { ListNode l1 = map1.get(moduleId); ListNode l2 = new ListNode(dependModuleId); l1.next = l2; map1.put(dependModuleId, l2); } } else { if (map2.containsKey(dependModuleId)) { ListNode l1 = new ListNode(moduleId); ListNode l2 = map2.get(dependModuleId); l1.next = l2; map1.put(moduleId, l1); } else { ListNode l1 = new ListNode(moduleId); ListNode l2 = new ListNode(dependModuleId); l1.next = l2; map1.put(moduleId, l1); map1.put(dependModuleId, l2); map2.put(dependModuleId, l2); map2.put(moduleId, l1); } } } private static boolean MouldIsCircularDependency(String moduleId) { for (Map.Entry<String, ListNode> entry : map1.entrySet()) { ListNode ring = detectCycle(entry.getValue()); ListNode curr = ring; boolean isFirst = true; while (curr != null && (curr != ring || isFirst)) { isFirst = false; if (curr.val.equals(moduleId)) { return true; } curr = curr.next; } } return false; } static void clear() { map1.clear(); map2.clear(); } public static ListNode detectCycle(ListNode head) { if (head == null || head.next == null) { return null; } ListNode fast = head, slow = head; while (true) { if (fast == null || fast.next == null) { return null; } slow = slow.next; fast = fast.next.next; if (fast == slow) { break; } } slow = head;//slow back to start point while (slow != fast) { slow = slow.next; fast = fast.next; } return slow; //when slow == fast, it is where cycle begins } } class ListNode { String val; ListNode next; ListNode(String val) { this.val = val; this.next = null; } }
查看原帖
点赞 评论
相关推荐
01-13 16:51
河北建筑工程学院 单片机 点赞 评论 收藏
分享
01-07 17:13
广州大学 前端工程师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客新年AI问运 #
5180次浏览 90人参与
# 秋招吐槽大会 #
303937次浏览 1522人参与
# 牛客AI体验站 #
15994次浏览 279人参与
# 找工作八股要背到什么程度? #
58594次浏览 735人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
145128次浏览 879人参与
# 签约/解约注意事项 #
871471次浏览 4695人参与
# 正在实习的你,几点下班 #
293132次浏览 1931人参与
# 工作中的卑微时刻 #
33324次浏览 199人参与
# 秋招踩过的“雷”,希望你别再踩 #
185995次浏览 1686人参与
# 通信和硬件还有转码的必要吗 #
90174次浏览 593人参与
# 我们是不是被“优绩主义”绑架了? #
32373次浏览 484人参与
# 你的秋招第一场笔试是哪家 #
290375次浏览 2079人参与
# 如何提高实习转正率? #
86234次浏览 504人参与
# 校招求职有谈薪空间吗 #
207464次浏览 2364人参与
# 牛友的春节生活 #
14473次浏览 236人参与
# 24秋招求职节奏总结 #
901940次浏览 12388人参与
# 材料专业哪个方向更好找工作? #
37789次浏览 118人参与
# 备战春招/暑实,现在应该做什么? #
9314次浏览 212人参与
# 多益网络工作体验 #
63033次浏览 306人参与
# 国企vs私企,你更想去? #
319062次浏览 2525人参与

正浩创新EcoFlow公司福利 754人发布