java - "Match the Shoes"挑战我的错误在哪里

标签 java algorithm sorting

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




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

项目的流行顺序定义如下:

  • 如果订购次数多于 2 次,则商品 A 比商品 B 更受欢迎
    B项。
  • 如果商品 A 和商品 B 的订购次数相同,则
    ID 较小的项目(见下文)更受欢迎。

  • 选择一双合适的鞋子来购买一件衣服并不是一个显而易见的决定。给定之前与某件商品一起购买的鞋子的购买频率,您能否通过向客户展示 K 款最流行的鞋子(按受欢迎程度排序)来帮助客户?

    输入格式

    第一行 i 包含三个以空格分隔的整数,分别描述以下值:
  • K - 您必须推荐的最受欢迎的鞋子数量。
  • M - 不同鞋号的数量。
  • 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升序排列
    编号并打印在第二行和第三行。
  • Shoe ID=0 不在此列表中,因为它的人气排名较低
    比 K=3。

  • link但是我的解决方案并没有通过所有情况,有人可以指出我在哪里做错了。我正在通过案例 6、9、15、16、18、19、20 和 21。但其余的都失败了。如果您有任何 build 性的批评,我的解决方案也可能不是最佳的,欢迎您听到。
    谢谢!
        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;
        }
    }
    

    最佳答案

    没有发现任何逻辑问题,所以提交你的代码。它工作正常。

    Works Fine

    关于java - "Match the Shoes"挑战我的错误在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765263/

    相关文章:

    java - 关于寻找矩阵中最大区域的练习的时间限制异常

    graphics - 绘制分层树 : treemapping

    php - 仅按数字对数组排序

    java - 程序顺序规则在构造函数中起作用之前是否发生?

    java - 使用引用调用交换两个数字

    java - Android/Java - 使用 SharedPreferences 制作、编辑、添加数字值

    arrays - 在排序数组上应用函数

    java - 使用 RuntimeExceptions 进行错误处理是一个好习惯吗?

    algorithm - 不可变语言如何高效地实现 set、concat、equals 等?

    javascript - 日期数组排序/控制台错误?