找出数组中出现出现一半以上次数的数

Posted 来自代码的诅咒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找出数组中出现出现一半以上次数的数相关的知识,希望对你有一定的参考价值。

老师留了这道微软面试题 并给出了解题思路

     j用于临时存储数组中的数据,count用于存储某个数出现的次数。
     开始时k存储数组中的第一个数,count为0,如果数组出现的数于j相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给j
     因为指定的数出现的次数大于数组长度的一半,所有count++与count--相抵消之后,最后count的值是大于等于1的,j中存的那个数就是出现最多的那个数。

#include <iostream>
using namespace std;

int search(int A[], int size)
{
    if (NULL == A || size<= 0)
    {
        return-1;
    }

    int count = 0;
    int j;
    for (int i = 0; i<size; i++)
    {
        if (count == 0)
        {
            j= A[i];
            count = 1;

        }
        else
        {
            if (A[i] == j)
                count++;
            else
                count--;
        }


    }
    return j;
}
int main()
{
    int A[6] = { 1,2,2,5,5,5 };
    cout << search(A,6)<<" ";
    return 0;
}

 

以上是关于找出数组中出现出现一半以上次数的数的主要内容,如果未能解决你的问题,请参考以下文章

如何找出数组中出现次数超过长度一半的元素

数组中有一个数字出现次数超过数组长度一半,找出这个数字(用C语言解决)。要求时间复杂度尽量小。

28:出现次数超过一半的数

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

一本通1186 出现次数超过一半的数(类似桶排序)

剑指offer系列54---数组中出现次数超过一半的数