zoukankan      html  css  js  c++  java
  • 数组中出现次数超过一半的数字

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
     
    有一个很容易理解的方法就是直接排序,如果该数字存在则中间的位置就是该数字。时间复杂度为O(nlgn)
    这次主要谈一谈第二种方法。
    遍历整个数组,如果下一个值与当前值相等,则计数器+1,若不等,则计数器-1,若计数器为0,则用检测的值赋值给当前值,计数器设1。这样如果该数存在,则最终得到的值就是数组中出现次数最多的值。最后遍历一次数组比对该数的次数若符合要求则为所求值,否则返回0.
    代码实现:
    class Solution {
    public:
        int MoreThanHalfNum_Solution(vector<int> numbers) {
            int p = numbers[0];
            int count = 0;
            for(int i = 0; i < numbers.size(); ++i){
                if(!count){
                    p = numbers[i];
                    count = 1;
                }else if(p - numbers[i]){
                    --count;
                }else{
                    ++count;
                }
            }
            count = 0;
            for(int i = 0; i < numbers.size(); ++i){
                if(p == numbers[i]){
                    ++count;
                }
            }
            if(count <= numbers.size()/2){
                p = 0;
            }
            return p;
        }
    };
     
  • 相关阅读:
    【Gamma】Scrum Meeting 5
    【Gamma】Scrum Meeting 4
    【Gamma】Scrum Meeting 3
    团队贡献分汇总
    【Gamma】Scrum Meeting 2
    【Gamma】 Scrum Meeting 1
    Beta阶段测试报告
    From scipy.misc import imread 中 ImportError: cannot import name imread的解决方法
    【软件工程】结对项目
    【软件工程】第一次阅读作业
  • 原文地址:https://www.cnblogs.com/GuoYuying/p/11545975.html
Copyright © 2011-2022 走看看