关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。
想改进这个问题?将问题更新为 on-topic对于堆栈溢出。
2年前关闭。
Improve this question
我正在尝试解决这个挑战:
项目的流行顺序定义如下:
B项。
ID 较小的项目(见下文)更受欢迎。
选择一双合适的鞋子来购买一件衣服并不是一个显而易见的决定。给定之前与某件商品一起购买的鞋子的购买频率,您能否通过向客户展示 K 款最流行的鞋子(按受欢迎程度排序)来帮助客户?
输入格式
第一行 i 包含三个以空格分隔的整数,分别描述以下值:
N 个后续行中的每一行 i (其中 0<=i
约束
输出格式
按照受欢迎程度从高到低的顺序对您的 K 鞋建议列表进行排序,然后将优先列表中的每个元素打印在新的一行上。
样本输入
3 4 8
2
1
2
0
3
3
1
2
样本输出
2
1
3
解释
热门商品,我们先打印出来。
出现次数相同,按ID升序排列
编号并打印在第二行和第三行。
比 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;
}
}
最佳答案
关于java - "Match the Shoes"挑战我的错误在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765263/