我正在尝试解决这一挑战:
项目的受欢迎程度定义如下:
选择合适的鞋搭配衣服不是一个明显的决定。给定先前与某物品一起购买的鞋子的购买频率,您能否通过向顾客展示K最受欢迎的鞋子(按受欢迎程度排序)来帮助客户?
输入格式
第一行i包含三个以空格分隔的整数,分别描述以下各个值:
N个后续行中的每行i(其中0 <= i
约束
输出格式
按照受欢迎程度从高到低的顺序排列您的K鞋建议列表,然后在新的一行上打印优先列表的每个元素。
样本输入
3 4 8
2
1
2
0
3
3
1
2
样本输出
2
1
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;
}
}
找不到任何逻辑问题,因此提交了您的代码。它可以正常工作。