我正在尝试解决Kattis指南针卡销售问题。为此,我有一个具有唯一性属性的Card对象列表。我必须开始删除唯一性最小的卡片,并在每次删除后重新计算唯一性值。
我的解决方案可以工作,但是由于时间限制,它无法通过第8个测试用例。我尝试将卡保留为SortedSet,但效果比List差。然后我尝试使用HashSet,但没有任何区别。
while (CardList.Count > 1)
{
CalculateUniqueness();
Card leastUnique = CardList.Min();
//Card leastUnique = CardList.OrderBy(p => p.TotalUniqueness).ThenByDescending(p => p.Id).First();
Console.WriteLine(leastUnique.Id);
CardList.Remove(leastUnique);
}
编辑: Card类的CompareTo方法:
public int CompareTo(object obj)
{
Card otherCard = (Card)obj;
int uniquenessComparison = TotalUniqueness.CompareTo(otherCard.TotalUniqueness);
if (uniquenessComparison != 0)
{
return uniquenessComparison;
}
else
{
return otherCard.Id.CompareTo(Id);
}
}