zoukankan      html  css  js  c++  java
  • 主元素问题

     1 /*主元素问题:数组中是否存在一个元素重复大于n/2次
     2 思路:
     3 1,推排序,快排,归并排序后,取a[n/2]再遍历一次验证 o(nlogn)
     4 
     5 2, 计数排序, o(n),要求数据分布较均匀,且是整数
     6 
     7 3,删除两个不一样的元素,数组的主元素保持不变. 
     8    超过一半的这个主元素比其它元素都多,设seed=主元素,
     9    遇到不一样的减一,一样的加一,最后seed至少为1。 o(n)
    10 */              
    11 #include<iostream>
    12 
    13 using namespace std;
    14 
    15 typedef int T;
    16 
    17 int findMajor(T *a, int n)
    18 {
    19     int count=0,i;
    20     T seed;
    21     for(i=0;i<n;i++)
    22     {
    23         if(0==count)
    24         {
    25             seed=a[i];
    26             count++;
    27         }
    28         else if(seed==a[i])
    29             count++;
    30         else if(seed!=a[i])
    31             count--;
    32     }
    33     count=0;
    34     for(i=0;i<n;i++)//最后要验证
    35     {
    36         if(seed==a[i])
    37             count++;
    38     }
    39     if(count>n/2)
    40         return seed;
    41     else
    42         return -1;
    43 }
    44 
    45 int main()
    46 {
    47     T a[]={2,3,1,2,2,2,5,4,2,2};
    48     int size=10;
    49     int major=findMajor(a,size);
    50     if(major==-1)
    51         cout<<"no";
    52     else
    53         cout<<major;
    54     cout<<endl;
    55     return 0;
    56 }
  • 相关阅读:
    批处理系列(10)
    批处理系列(11)
    批处理系列(9)
    批处理系列(7)
    批处理系列(8)
    批处理系列(6)
    批处理系列(4)
    批处理系列(5)
    Java项目性能监控和调优工具-Javamelody的学习总结
    easyUI 接收Spring Mvc中@ResponseBody中文乱码解决
  • 原文地址:https://www.cnblogs.com/fkissx/p/4503965.html
Copyright © 2011-2022 走看看