zoukankan      html  css  js  c++  java
  • 求绝对众数

    已知给定的N个整数存在绝对众数,以最低的时空复杂度计算该绝对众数。

    删除数组A中两个不同的数,绝对众数不变。
    若两个数中有1个是绝对众数,则剩余的N-2个数中,绝
    对众数仍然大于(N-2)/2;
    若两个数中没有绝对众数,显然不影响绝对众数。

     算法描述:

    记m为候选绝对众数,出现次数为c,初始化为0。
    遍历数组A:

     若c==0,则m=A[i];
    若c≠0且m≠A[i],则同时删掉m和A[i];
    若c≠0且m==A[i],则c++;

    int Mode(int* a, int size)
    {
    	int count = 0;
    	int m = a[0];
    	for (int i = 0; i < size; i++)
    	{
    		if (count == 0)
    		{
    			m = a[i];
    			count = 1;
    		}
    		else if (m != a[i])
    		{
    			count--;
    		}
    		else
    		{
    			count++;
    		}
    	}
    	return m;
    }
    
    int main()
    {
    	int a[] = { 8, 8, 1, 1, 1, 8, 1, 1, 6, 1, 8 };
    	int m = Mode(a, sizeof(a) / sizeof(int));
    	cout << m << endl;
    }


  • 相关阅读:
    设计模式--单例模式(Singleton)
    C# 和.Net 特性
    Fiddler 教程
    史铁生遗作:昼信基督夜信佛
    如何实现早日退休理想
    Linux 常用
    Golang 读书
    Python 读书
    RbMQ 简介
    UML 简介
  • 原文地址:https://www.cnblogs.com/muyangshaonian/p/9650553.html
Copyright © 2011-2022 走看看