““穿上鞋子”挑战我的错误在哪里

问题描述 投票:0回答:1

我正在尝试解决这一挑战:

项目的受欢迎程度定义如下:

  • 如果订购的次数超过项目B。
  • 如果项目A和项目B的订购次数相同,则ID较小的商品(如下所示)更受欢迎。

选择合适的鞋搭配衣服不是一个明显的决定。给定先前与某物品一起购买的鞋子的购买频率,您能否通过向顾客展示K最受欢迎的鞋子(按受欢迎程度排序)来帮助客户?

输入格式

第一行i包含三个以空格分隔的整数,分别描述以下各个值:

  1. K-您必须建议的最受欢迎的鞋子数量。
  2. M-不同的鞋子ID的数量。
  3. N-订单数。

N个后续行中的每行i(其中0 <= i

约束

  • 1 <= K <= 100
  • K <= M <= 50000
  • 1 <= N <= 1000000
  • 0 <= Ai <= M

输出格式

按照受欢迎程度从高到低的顺序排列您的K鞋建议列表,然后在新的一行上打印优先列表的每个元素。

样本输入

3 4 8
2
1
2
0
3
3
1
2

样本输出

2
1
3

说明

  • ID = 2的鞋子出现了3次。因为这是最热门商品,我们先打印出来。
  • ID = 1和ID = 3的鞋子各出现2次。因为两双鞋出现相同的次数,它们按升序排列数字并印在第二和第三行。
  • 鞋子ID = 0不属于此列表,因为其人气排名较低比K = 3。

link,但我的解决方案无法解决所有问题,有人可以指出我在哪里做错了。我正在通过案例6,9,15,16,18,19,20和21,但是其余的都失败了。如果您有任何建设性的批评,也许我的解决方案也不是最佳选择,我很高兴听到它。谢谢!

    import java.util.*;
    public class Solution {
    static int numberOfInputElements = 3;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int inputArray[] = new int[numberOfInputElements];
        for (int i = 0; i < inputArray.length; i++) {
            inputArray[i] = scanner.nextInt();
        }
        int K = inputArray[0];
        int M = inputArray[1];
        int N = inputArray[2];

        // Constrains check
        if ((K >= 1 && K <= 100) && (K <= M && M <= 50_000) && (1 <= N && N <= 1_000_000)) {
            int orders[] = new int[N];
            for (int i = 0; i < orders.length; i++) {
                orders[i] = scanner.nextInt();
            }
            scanner.close();
            Map<Integer, Integer> hm = new HashMap();
            for (int x : orders) {
                if (!hm.containsKey(x)) {
                    if ((hm.keySet().size() >= 0) && (hm.keySet().size() <= M)) {
                        hm.put(x, 1);
                    } else
                        return;
                } else {
                    hm.put(x, hm.get(x) + 1);
                }
            }
            ArrayList result =  new ArrayList();
            result = sortByValue(hm);
            for (int i=0; i<K;i++){
                System.out.println(result.get(i));
            }
        } else {
            throw new IllegalArgumentException("The arguments does not look right!");
        }
    }

    private static ArrayList sortByValue(Map<Integer, Integer> unsortMap) {

        // 1. Convert Map to List of Map
        List<Map.Entry<Integer, Integer>> list =
                new LinkedList<Map.Entry<Integer, Integer>>(unsortMap.entrySet());

        // 2. Sort list with Collections.sort(), provide a custom Comparator
        //    Try switch the o1 o2 position for a different order
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            public int compare(Map.Entry<Integer, Integer> o2, Map.Entry<Integer, Integer> o1) {
                return (o1.getValue()).compareTo(o2.getValue());
            }
        });

        // 3. Loop the sorted list and put it into a new insertion order Map LinkedHashMap
        ArrayList  arrayList =  new ArrayList();
        for (Map.Entry<Integer, Integer> entry : list) {
            arrayList.add(entry.getKey());    
        }
        return arrayList;
    }
}
java algorithm sorting
1个回答
0
投票

找不到任何逻辑问题,因此提交了您的代码。它可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.