关注
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-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 春招什么时候投? #
5133次浏览 76人参与
# 春节提前走,你用什么理由请假? #
4985次浏览 108人参与
# 春节前,你还在投简历吗? #
7231次浏览 95人参与
# 实习到现在,你最困惑的一个问题 #
1932次浏览 56人参与
# 牛客AI体验站 #
13369次浏览 253人参与
# 牛友的春节生活 #
1684次浏览 57人参与
# 备战春招/暑实,现在应该做什么? #
1677次浏览 53人参与
# 从夯到拉,锐评职场mentor #
1573次浏览 31人参与
# 聊聊Agent开发 #
14516次浏览 363人参与
# 距离春招还有一个月,你现在是什么开局? #
2951次浏览 53人参与
# 推荐一个值得做的AI项目 #
3961次浏览 125人参与
# 暑期实习什么时候投? #
3595次浏览 84人参与
# 实习想申请秋招offer,能不能argue薪资 #
218596次浏览 1171人参与
# 腾讯工作体验 #
566943次浏览 3701人参与
# 哪些瞬间让你真切感受到了工作的乐趣 #
24448次浏览 105人参与
# 通信硬件2024笔试面试经验 #
269170次浏览 2053人参与
# 实习必须要去大厂吗? #
188511次浏览 1767人参与
# 正在春招的你,也参与了去年秋招吗? #
349929次浏览 2590人参与
# 双非本科的出路是什么? #
208713次浏览 1566人参与
# 最难的技术面是哪家公司? #
65412次浏览 971人参与
OPPO公司福利 1176人发布