zoukankan      html  css  js  c++  java
  • 【剑指offer】面试题29:数组中出现次数超过一半的数字

    题目:

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

    思路:

    保存两个值:一个数组中的数字、一个出现的次数

    如果当前值和保存的数字相同,则次数加1;如果不同,则次数减1;当次数为0时,保存当前数字、置次数为1。

    代码:

    class Solution {
    public:
        int MoreThanHalfNum_Solution(vector<int> numbers) {
            if(numbers.size()==0)  return 0;//好吧,OJ说这里应该为0
            
            int res=numbers[0];
            int cnt=1;
            
            for(int i=1;i<numbers.size();++i)
            {
                if(numbers[i]==res) cnt++;
                else
                {
                    if(cnt) cnt--;
                    else//次数为0时
                    {
                        res=numbers[i];
                        cnt++;
                    }
                }
            }
            
            if(CheckMoreThanHalf(numbers,res))  return res;
            else return 0;
        }
    private:
        bool CheckMoreThanHalf(vector<int> numbers, int res)
        {
            int count=0;
            for(int i=0;i<numbers.size();++i)
            {
                if(numbers[i]==res) count++;
            }
            
            if(count>numbers.size()/2)  return true;
            else return false;
        }
    };
  • 相关阅读:
    java安装jdk时,执行javac出错
    servlet入门
    maven安装出错原因分析
    备份整个schema的数据
    备份db2schema数据
    UltraEdit使用技巧
    获取数据库分组后的最大值
    什么是jsp
    linux 上使用FTP传输文件
    关于opencv进行rtsp取流播放视频特别慢的问题记录
  • 原文地址:https://www.cnblogs.com/buxizhizhou/p/4722215.html
Copyright © 2011-2022 走看看