题解 | #数组中出现次数超过一半的数字#

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

https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

int MoreThanHalfNum_Solution(int* numbers, int numbersLen ) {
    // write code here              //这个方法参考2013年408考研的代码题的最优解法
    int count=0,a=numbers[0];     //a用于记录可能是出现超过一半的数组,出现一次count+1,不是则+1
    for(int i=1;i<numbersLen;i++){
        if(numbers[i]==a) count++;    //如果这个数是可能数a,则count+1
        else{
            if(count>0) count--;    //若这个数不是,则判断count,count>0则表明a还是有可能是的
            else{
                a=numbers[i];        //否则的话替换掉,因为目标数出现超过一半,所以最终还是会替换回来的
                count=1;
            }
        }
    }
    return a;
}

全部评论
那如果是[1,2,2,2,1,1,1]这组用例呢
点赞 回复 分享
发布于 2023-10-25 14:47 江西

相关推荐

评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务