我应该为高分列表使用啥数据结构? [复制]
Posted
技术标签:
【中文标题】我应该为高分列表使用啥数据结构? [复制]【英文标题】:What data structure should I use for a high score list? [duplicate]我应该为高分列表使用什么数据结构? [复制] 【发布时间】:2012-07-14 08:22:16 【问题描述】:可能重复:How to sort a Map<Key, Value> on the values in Java?how to sort Map values by key in Java
我正在尝试跟踪分数,并且我需要能够将分数按非升序排序,而不会使键和值脱节。我的第一个想法是使用地图,但我真的很难找到一种方法来保持地图按价值排序。这些值都是整数对象。我将如何对这样的高分列表进行排序?
【问题讨论】:
这篇文章似乎描述了您的问题:[***.com/questions/109383/… [1]: ***.com/questions/109383/… 【参考方案1】:这是一个微软/亚马逊求职面试类型的问题。
您可以使用优先级队列,或者将最高分作为队列的第一个元素。创建一个节点作为key | value
对。以通过分值维护键顺序的方式实现它,并实现队列。
提供更多细节
这是你的Node
实现:
public class Node
private String name; // the name
private double score; // assuming you're using double
public Node(String name, double score)
this.name = name;
this.score = score; // assuming negative scores are allowed
public void updateScore(double score)
this.score += score;
当你使用PriorityQueue
时,根据分值制作Comparison
。如果需要搜索/更新,是O(1),根据Java API:
实现说明:此实现提供 O(log(n)) 时间 入队和出队方法(offer、poll、remove() 和 add); remove(Object) 和 contains(Object) 方法的线性时间;和 检索方法(peek、元素和大小)的恒定时间。
阅读 API,我猜您可能需要覆盖 Comparator<? super E> comparator()
,或者至少根据您的需要对其进行修改。应该这样做。
【讨论】:
这是一个关于排序地图的问题。 PriorityQueue 有什么关系? @Bohemian 不,不是。这是一个关于哪种数据结构最适合这项工作的问题。 OP 只是解释说他尝试使用地图,而不是他想要基于地图的解决方案。 我对如何使用 PriorityQueue 对整数值进行排序同时仍保持字符串的位置感到有点困惑。 请给我写个小代码sn-p好吗? @SaxSalute 我提供了有关实施的更多细节。您使用的是哪种编程语言?以上是关于我应该为高分列表使用啥数据结构? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
我应该为这个 UDF 使用啥对象,它应该根据列标题在一组数据中查找值?
为啥 list 应该先转换为 RDD 再转换为 Dataframe?有啥方法可以将列表转换为数据框?