数组中出现次数超过一半的数字

来源:互联网 发布:网络机顶盒怎么看电视 编辑:程序博客网 时间:2024/06/05 02:37

题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。

1.使用排序算法,将整个数组排序,然后中间的数字就是出现次数超过一半的数字。时间复杂度为O(nlogn)。

2.数组中有个数字出现的次数超过了数组长度的一半。也就是说,有个数字出现的次数比其他所有数字出现次数的和还要多。因此我们可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字,一个是次数。当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1。如果下一个数字和我们之前保存的数字不同,则次数减1。如果次数为零,我们需要保存下一个数字,并把次数设为1。由于我们要找的数字出现的次数比其他所有数字出现的次数之和还要多,那么要找的数字肯定是最后一次把次数设为1时对应的数字。时间复杂度为O(n)。

3.每次删除两个不相同的数,直到不能删除为止。由于某个数出现次数超过一半,那么最后剩下的必然是这个数。

0 0