给出一个长度为n的数组。数组中有一个数量的数字出现超过阵列长度的一半以上,请找到此数字。例如,输入一个长度为9 [1,2,3,2,2,2,5,4,2]。因为数字2出现在数组中5次,超过了数组长度的一半,输出2。
例子:
思考哈希手表的最简单方法是使用哈希手表方法来计算每个数字出现的次数,并且很容易找到人群的数量。
算法的时间复杂性为O(n),空间复杂性也为O(n)。
我们对排序算法中的数组进行排序,并且必须拥挤排序阵列的中间。
Boyer-Moore投票算法最经典的解决方案是Boyer-Moore投票算法。Boyer-Moore的投票算法的核心观念是抵消选票的数量,即当我们满足人群时的数量时,票数+1,当我们遇到非拥挤的数量时,票数为-1。
我们假设NUMS NUM的数量为X,并且数组的长度为N。我们可以很容易地知道,如果数组的先前A的数量为0,则其余N-A数字的票数必须大于0,即N-A数字仍然是X。
该组的第一个元素是N1,数组数为X,遍历和计数选票数。当票数和0发生时,该数组的其余元素必须为X。这是因为::
因此,在删除M字符时,我们仅删除了最大的数量,因此在其余的N-M元素中,X仍然是数字。使用此功能,我们可以每次遇到数字时减少其余的数组间隔投票和0。遍历完成后,最后一轮假设中的假设数为数字。
算法的时间复杂性为O(n),空间复杂性为O(1)。