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

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
    思路:
      一、首先对该数组进行一个排序,由于该数字出现的次数超过数组长度的一半,则numbers[length/2]必为该数字,但最后仍需要对该数字进行验证,判断是否符合条件
    class Solution {
    public:
        int MoreThanHalfNum_Solution(vector<int> numbers) {
            if(numbers.empty())
                return 0;
            sort(numbers.begin(),numbers.end());
            int middle = numbers[numbers.size() / 2];
            int count = 0;
            for(int i = 0;i < numbers.size();i++)
            {
                if(numbers[i] == middle)
                    count++;
            }
            return (count > numbers.size()/2) ? middle:0;
        }
    };
     
      二、由于该数字出现的次数超过数组长度的一半,遍历整个数字,遇到相同的数字,次数+1,不同的,次数-1,当次数为0时,保存下一个数字,再进行相同+1,不同-1的操作,最后得到的那个数字就是次数超过一半的数字,同样,也需要对该数进行判断是否符合条件。
    class Solution {
    public:
        int MoreThanHalfNum_Solution(vector<int> numbers) {
            if(numbers.empty())
                return 0;
            //遍历每个元素,并记录次数;若与前一个元素相同,则次数加1,否则次数减一
            int result = numbers[0];
            int times = 1;
            for(int i = 1;i < numbers.size();i++)
            {
                if(times == 0)
                {
                    result = numbers[i];
                    times ++;
                }
                else if(numbers[i] == result)
                {
                    times++;
                }
                else
                    times--;
            }
            //判断result是否符合条件
            times = 0;
            for(int i = 0;i < numbers.size();i++)
            {
                if(numbers[i] == result)times++;
            }
            return (times>numbers.size()/2)? result:0;
        }
    };
  • 相关阅读:
    .NET分布式架构开发实战之一 故事起源
    .NET 分布式架构开发实战之三 数据访问深入一点的思考
    .NET 分布式架构开发实战之二 草稿设计
    .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)
    跨域SSO的实现之一:架构设计
    .NET下实现分布式缓存系统Memcached
    第一章 .NET的原理(2.0)
    Memcache协议中文版
    Excel数据导入Axapta中
    SQL Server2000的安装
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12577238.html
Copyright © 2011-2022 走看看