zoukankan      html  css  js  c++  java
  • 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。

    现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。

    分析:设数A出现次数超过一半。每次删除两个不同的数,在剩余的数中,数A出现的次数仍超过一半。通过重复这个过程,求出最后的结果。这个题目与编程之美中寻找水王相同

    #include<iostream>
    using namespace std;
    //size为数组A的大小
    //返回数组中出现超过一半的数
    int search(int *A,int size)
    {
        int count=0;
        int current;
        for(int i=0;i<size;i++)
        {
            if(count==0)
            {
                current=A[i];
                count=1;
    
            }
            else
            {
                if(A[i]==current)
                    count++;
                else
                    count--;
            }
    
    
        }
        return current;
    }
    int main()
    {
        int A[6]={2,1,2,1,1,1};
        int B[7]={1,0,1,0,0,0,1};
        int C[7]={3,4,6,3,3,3,7};
        cout<<search(A,6)<<" ";
        cout<<search(B,7)<<" ";
        cout<<search(C,7)<<" "<<endl;
        int i;
        cin>>i;
        return 0;
    }
  • 相关阅读:
    线程状态
    JVM的运行
    HBase与Protobuf
    HBase Java API
    HBase全分布式部署
    HBase 伪分布式搭建
    HBase架构
    mysql存储引擎中InnoDB与Myisam的区别及应用场景
    mysql5.6 主从配置
    Mongodb3.4安装
  • 原文地址:https://www.cnblogs.com/cheng07045406/p/3369332.html
Copyright © 2011-2022 走看看