检查不同类型对象的元素数量是否相同的最佳数据结构是什么?
例如,如果我有
2 a's
3 b's
3 c's
不同类型对象的元素数量不相同。
如果我有
2 a's
2 b's
2 c's
那么这是一样的。
允许您在O(1)时间执行此操作的最佳数据结构是什么?您将如何实现它?
答案 0 :(得分:3)
一种方法是使用两个词典,以便能够动态地在O(1)中完成。
第一个将每个类型映射到一个计数,{a:2,b:3,c:3}。第二个将每个计数映射到具有该计数的一组类型。 {2:{A},3:{B,C}}。如果第二个字典的大小小于2(0或1)那么显然所有类型具有相同的计数,如果不是这种情况那么在该字典中将至少有两个键 - 项对,假设该字典当计数改变时更新。
答案 1 :(得分:0)
Dictionary<Type, int> typeCounts = new Dictionary<Type, int>();
// read and store type counts
Type type = typeof(A);
if (typeCounts.Contains(type))
{
typeCounts[type]++;
}
else
{
typeCounts.Add(type, 1);
}
// populate type counts by type and finally:
if (typeCounts[typeA] == typeCounts[typeB])
{
// so on
}