我正在使用Objective-C编程,但语言无关的答案在这里可以正常工作。我有一个包含许多属性的对象列表,包括创建日期和用户GUID。我正在寻找一种合理有效的方法来过滤此列表,以便仅包含每个用户ID的最新条目。有没有比O(n ^ 2)好的解决方案?我想我可以检查每个元素,如果它是我尚未处理的ID,抓住所有具有相同ID的对象,找到最新的,并将该值存储在其他地方,但这似乎是一种天真的方法。
答案 0 :(得分:1)
如果您只想击败O(n ^ 2),那么您可以按(ID,时间)排序,然后迭代,第一次看到ID时,将其附加到某个答案列表中。这将是O(n log n)。
或者,创建一个Hash表并遍历列表。检查项目是否在地图中(按ID),如果是,则将当前项目替换为当前项目。对于完美的散列函数,这将是O(n)。