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

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

     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;
}

 

posted @ 2016-05-17 20:33  来自代码的诅咒  阅读(139)  评论(0编辑  收藏  举报