算法或数据结构

时间:2013-12-13 08:33:18

标签: algorithm data-structures

有一个问题说: 给定每张卡上的n和n个卡号,写入一个数字 我们有骰子,k次我们掷骰子,如果骰子显示的数字是m,那么我们必须划伤其中一个可被m分割的卡片数量 困难在于刮痕应该在O(1)

中完成

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

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

TNX! :)

1 个答案:

答案 0 :(得分:1)

如果您知道卡上的所有数字都是唯一的,您可以创建一个数组并将卡对象存储在数组中写入数字的索引上。抓一个数字就可以了

cardArray[number].scratch()

如果数字很大,你必须创建一个大数组,所以最好为它创建一个哈希值。

cards = {cardNumber:cardObject, ...}
cards[cardNumber].scratch

划分所有可由m分类的数字创建哈希,如下所示

dicemax = 6
scratched = {number: false; ....}
card.scratched? => return scratched[card.number % dicemax]

您可以使用划痕哈希跟踪滚动的数字。所以抓它们将在O(1)中,只需重写哈希的值。 检查卡是否被刮伤,你得到卡上的号码。并查看它的数量是模数最大值的模数。如果这个数字已被哈希划伤,那么卡片就会被划伤。

相关问题