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

    题目描述

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

    题目解析

      如果有符合条件的数字,则它出现的次数比其他所有数字出现的次数和还要多。
    在遍历数组时保存两个值:一是数组中一个数字,一是次数。遍历下一个数字时,若它与之前保存的数字相同,则次数加1,否则次数减1;若次数为0,则保存下一个数字,并将次数置为1。遍历结束后,所保存的数字即为所求。然后再判断它是否符合条件即可。
    之所以还要判断一下是否次数大于数组长度一半,是为了应对{4 2 4 1 4 2}这种数据,如果不加条件,返回的是4,实际上要是想满足大于数组长度一半,还是要再遍历一遍统计次数进行校验。
    class Solution {
    public:
        int MoreThanHalfNum_Solution(vector<int> numbers) {
            int temp=numbers[0];
            int counter=1;
            int i;
            for( i=1;i<numbers.size();i++){
               if(counter==0){
                    temp=numbers[i];//应该放前面,否则会出现负数
                }
                if(temp==numbers[i]){
                    counter++;
                }
                else{
                    counter--;
                }  
                
            }
            for(int j=0;j<numbers.size();j++){
                if(temp==numbers[j])
                    counter++;
                if(counter>(numbers.size()/2)+1)//注意这里是超过。别忘记加1(特殊情况时数组长度为6的时候)
                    return temp;
            }
            return 0;
        }
    };
    

      

     

  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/curo0119/p/9067095.html
Copyright © 2011-2022 走看看