class Solution {
public List<String> topKFrequent(String[] words, int k) {
List<String> answer = new ArrayList();
HashMap<String, Integer> frequency = new HashMap<>();
//record the frequency
for (String word: words){
frequency.put(word,frequency.getOrDefault(word,0)+1);
}
//record the frequency in the priority queue
PriorityQueue<String> pq = new PriorityQueue<>((a,b)->{
if(frequency.get(a) != frequency.get(b)){
return frequency.get(b) - frequency.get(a);
}else{
return frequency.get(b).compareTo(frequency.get(a));
}
});
for(String key:frequency.keySet()){
pq.offer(key);
}
//return the first kth string
for(int i = 0; i < k;i++){
answer.add(pq.remove());
}
return answer;
}
}
答案应该是[“我”,“爱”]而我得到了[“爱”,“我”]我想因为在pq中,爱在我之前,所以可能我在pq中做错了,但我不知道如何解决这个问题
我认为问题不在于你对优先队列的理解。由于其他原因,此代码失败。
第一:
frequency.get(a) != frequency.get(b)
您正在比较对象,而不是原始int。您可以通过将其中一个对象转换为这样的对象来解决这个问题
(int) frequency.get(a) != frequency.get(b)
第二:如果两者的频率相同,则需要按字母顺序进行比较。此代码:
frequency.get(b).compareTo(frequency.get(a))
再次比较它们的频率。把它换成这个
a.compareTo(b)
这两个改变应该可以解决你的问题。
简介 举个例子。我有一个用户表,这个表根据用户名被Hash到不同的数据库实例上,我要找出这些用户中最热门的5个,怎么做?我是这么做的: 在每个数据库实例上找出最热门的5个 将每个数据库实例上的这5条数据按照热门程度排序,最后取出前5条 这个过程看似简单,但是你应用服务器上的代码要写不少。首先需要Query N个列表,加入到一个新列表中,排序,再取前5。这个过程不但代码繁琐,而且牵涉到多个列表,非常
错误 第6:44行:在函数“app”中调用React Hook“useState”,该函数既不是React函数组件,也不是自定义React Hook函数React Hook/rules of Hook 搜索关键字以了解有关每个错误的更多信息。
有没有插件/附加组件可以帮助创建框架?从何处开始创建框架以及如何继续? 你的意见很有价值。 谢谢,阿美
(13K星)不管是好是坏,我认为毕加索时代可能已经结束了。
问题内容: 我正在尝试根据文档中提供的示例实现优先级队列。文件:priorityQueue 简而言之,它看起来像这样(不包括所有内容): 该文件中: 如您所见,在与示例进行比较时,我不使用指针,因为这样做会给我一个编译错误,告诉我我的优先级队列未正确实现接口。 这会给我带来以下问题: 该项目未附加到队列中。 我试图写出队列指针地址,它显示了不同的地址。这就解释了为什么它不起作用,但是切片不是地图长
想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 谁能告诉我我做什么?这不起作用