给出2n-1个数字的列表:全部在1到n之间,除了一个之外的所有数字都出现两次。确定仅发生一次的数字。多种方式首选。
我认为问题是错误的,如何在不知道数字列表的情况下确定哪个数字?
答案 0 :(得分:1)
[O(1)space,O(n)time] :只需取所有数字的XOR。由于除了一个数字之外所有数字都出现两次,因此这些数字的XOR将为零,并且单个出现的数字将是结果。
[O(1)space,O(n)time] :正如user3386109在评论中所述,我们可以将所有给定的数字相加并将其与范围[1, n]
中的数字之和将为n*(n+1)
(因为所有数字应该出现两次)。这两个数字的差异就是答案。
[O(n)space,O(n)time] :创建一个大小为n
的数组,并将数组中所有元素的数量保持为相应的职位。最后,遍历数组,找到其计数仅为1
的数字。