题目:清除数组的最小花费大佬们,帮忙看下,这个代码的思路有什么问题呢,测试用例过了,但是提交上去后只过了15%。public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int count = in.nextInt(); ArrayList<Integer> arrayList = new ArrayList<>(); for (int i = 0; i < count; i++) { int n = in.nextInt(); int k = in.nextInt(); int x = in.nextInt(); HashMap<Integer, Integer> map = new HashMap<>(); ArrayList<Integer> list = new ArrayList<>(); for (int j = 0; j < n; j++) { int num = in.nextInt(); map.merge(num, 1, Integer::sum); list.add(num); } int min = getFirstMinNum(map); int minRes = Math.min(n * x, k * min); for (int j = 0; j < list.size(); j++) { if (list.get(j) < min) { assert map.containsKey(list.get(j)); if (map.get(list.get(j)) == 1) { min = list.get(j); map.remove(list.get(j)); } else { Integer v = map.get(list.get(j)); map.put(list.get(j), v - 1); } } int tempRes = k * min + x * (j + 1); if (tempRes < minRes) { minRes = tempRes; } } arrayList.add(minRes); } in.nextLine(); arrayList.forEach(System.out::println); } } private static int getFirstMinNum(HashMap<Integer, Integer> map) { int i = 0; for (; i<= 200000; i++) { if (!map.containsKey(i)) { return i; } } return i; }