Algorithm 算法或数据结构

Algorithm 算法或数据结构,algorithm,data-structures,Algorithm,Data Structures,有一个问题是: 给定一个数字n和n张卡片,每张卡片上都写着一个数字 我们有骰子,k次我们掷骰子,如果骰子显示的数字是m,那么我们必须划掉其中一张可以被m整除的牌 困难在于划伤数字应该在O(1)中完成 我找不到解决方案,可能需要一个算法或特殊的数据结构 如果有人能帮助我,我会很高兴:) tnx!:) 如果您知道卡上的所有数字都是唯一的,那么您可以创建一个数组,并将卡对象存储在数组中,该数组的索引是写在卡上的数字。抓取一个数字将是非常困难的 cardArray[number].scratch()

有一个问题是: 给定一个数字n和n张卡片,每张卡片上都写着一个数字 我们有骰子,k次我们掷骰子,如果骰子显示的数字是m,那么我们必须划掉其中一张可以被m整除的牌 困难在于划伤数字应该在O(1)中完成

我找不到解决方案,可能需要一个算法或特殊的数据结构

如果有人能帮助我,我会很高兴:)


tnx!:)

如果您知道卡上的所有数字都是唯一的,那么您可以创建一个数组,并将卡对象存储在数组中,该数组的索引是写在卡上的数字。抓取一个数字将是非常困难的

cardArray[number].scratch()
如果数字很大,则必须创建一个大数组,因此最好为此创建一个哈希

cards = {cardNumber:cardObject, ...}
cards[cardNumber].scratch
要将所有可除以m的数字划掉,请按如下方式创建哈希

dicemax = 6
scratched = {number: false; ....}
card.scratched? => return scratched[card.number % dicemax]
您可以使用刮痕散列跟踪滚动的数字。所以在O(1)中,只需重写散列的值就可以了。
检查一张卡是否被刮伤,你会得到卡上的号码。看看它的数值是多少,是以骰子最大值为模的。如果这个数字在散列中被划掉,卡片就会被划掉。

你对
m
k
n
有什么界限吗?你有什么想法可以分享吗?