我有一个已按最高等级排序的商品列表,我存储在变量 topList 中。
然后我有我存储在变量 currentList
中的当前项目列表目标是找到topList中排名最高的currentList元素。
section
我的方法ReturnTop太慢,它是O(n²)。我们可以做得更好吗?
答案 0 :(得分:2)
您当前的实现是O(N * T),其中N是查询列表中的项目数,T是顶部列表中的项目数;使用空间是O(1)。
如果你不介意将空间的使用增加到O(N),你可以通过从查询字构造一个哈希集,并在{{1}中搜索第一个单词,在O(N + T)中实现一个算法。匹配一个查询词,如下所示:
topList
构造var knownWords = new HashSet<string>(currentList);
return topList.FirstOrDefault(w => knownWords.Contains(w));
需要O(N)时间和O(N)空间。在knownWords
中搜索topList
中存在的最早项目需要O(T)时间和O(1)空间,因为哈希集查找为O(1)。
这可以进一步缩短(谢谢,Slai!)
knownWords
答案 1 :(得分:0)
var topList = new List<string>() {"AB", "DC", "ZG"}; // ordered by highest rank
var currentList = new List<string> {"ZG", "DC"};
var bestItem = currentList.OrderBy(item => topList.FindIndex(a => a == item)).FirstOrDefault();
Console.WriteLine(bestItem);
答案 2 :(得分:0)
使用下面的解决方案搜索顶部项目将采用O(N + M)(其中N是topList项目的数量,M是当前列表的数量),可以计为O(2N)
创建字典时,它会循环echo "Hello {$username} Welcome back";
的所有项目
并且将循环使用topList
的所有项目以搜索具有最小索引的项目。
current