笔试复盘:由于输入写错引发的命案
太草了,原来我的解法是正确的,只是由于我输入写成了这种 in.nextLine().equals("");
#Java工程师##笔经#
我是逆过来存的,下面这个版本应该是正确的,本地调试也是要 ctrl + D 结束输入,空间换时间
// 时间限制: 3000MS // 内存限制: 589824KB // 题目描述: // 一般在代码Code Review或者持续集成过程中, // 一次代码提交会触发代码的重新编译及正在Review过程的Pull Request的Approval重置, // 为了加快编译或者只重置受影响的Pull Reqeust,都会进行代码包依赖分析, // 找出受影响的代码包(package)。我们使用正整数表示包,对给定的被修改的包, // 求出所有受影响的包(去重)所代表数字的和,若无受影响的包,则和返回-1。 // 注意,直接依赖及间接依赖的包被修改,当前包均被定义为受影响。 // // 输入描述 // 第一行为整数,代表被修改的包。 // 第二行开始的后续行都是数组,代表数组的第一个元素依赖后续的元素, // 注意数组元素可能只有1个,代表该包无依赖。 // 如输入样例的含义为被修改的包是4, // 包1依赖2, // 包3依赖4、5、6, // 包2依赖3, // 包6依赖4、2, // 包8依赖9, // 包10无依赖。 // // 输出描述 // 所有受影响的包去重后为1、2、3、6,所以其和为12. // // 样例输入 // 4 // 1,2 // 3,4,5,6 // 2,3 // 6,4,2 // 8,9 // 10 // 样例输出 // 12 // 3,6,2,1 // // 提示 // 依赖关系中可能有环,也可能有部分包与其它包之间没有依赖关系。另外,不用考虑求和时整数溢出。
import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { /******************************结束写代码******************************/ public static void main(String[] args){ Scanner in = new Scanner(System.in); String line = in.nextLine(); int target = Integer.parseInt(line.split(" ")[0]); HashMap<Integer,HashSet<Integer>> map = new HashMap<>(); while(in.hasNext()){ String src = in.nextLine(); String []arr = src.split(","); int tt = Integer.parseInt(arr[0]); if(!map.containsKey(tt)){ HashSet<Integer> tmpp = new HashSet<>(); map.put(tt,tmpp); } for (int i = 1; i < arr.length; i++) { int value = Integer.parseInt(arr[i]); if(map.containsKey(value)){ HashSet<Integer> set = map.get(value); set.add(tt); map.put(value,set); }else{ HashSet <Integer>tmpset = new HashSet<>(); tmpset.add(tt); map.put(value,tmpset); } } } Deque<Integer> queue = new LinkedList<>(); queue.offerFirst(target); HashSet<Integer> addbefore = new HashSet<>(); int res = 0; if(!map.containsKey(target)){ System.out.println(0); return; } while(!queue.isEmpty()){ int value = queue.pollLast(); if(map.containsKey(value)) { HashSet<Integer> set = map.get(value); if (!set.isEmpty()) { for (Integer o : set) { System.out.println(o); if (!addbefore.contains(o)) { res += o; queue.offerFirst(o); addbefore.add(o); } } } } } System.out.println(res); } }
#Java工程师##笔经#