牛客网——数组中出现次数超过一半的数字

题目描述:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

示例:

输入

[1,2,3,2,2,2,5,4,2]

返回值

2

代码如下:

/**
 * 
 * @param numbers int整型一维数组 
 * @param numbersLen int numbers数组长度
 * @return int整型
 */
int MoreThanHalfNum_Solution(int* numbers, int numbersLen ) {
    // write code here
    int i, count=0;
    int majority_number;
    for(i=0; i<numbersLen; ++i)
    {
        if(0 == count){
            majority_number = numbers[i];
        }
        if(majority_number == numbers[i]){
            ++count;
        } else{
            --count;
        }
    }
    
    count = 0;
    for(i=0; i<numbersLen; ++i)
    {
        if(majority_number == numbers[i]){
            ++count;
        }
    }
    if(count > numbersLen/2){
        return majority_number;
    } else{
        return 0;
    }
    
}
posted @ 2023-04-22 14:04  调蓝师  阅读(19)  评论(0)    收藏  举报