美团 8月10日笔试第二题

题目:清除数组的最小花费

大佬们,帮忙看下,这个代码的思路有什么问题呢,测试用例过了,但是提交上去后只过了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;
    }
全部评论
涉及乘法的都换成long
点赞 回复 分享
发布于 2024-08-15 15:39 四川
long
点赞 回复 分享
发布于 2024-08-10 12:21 广东

相关推荐

zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务