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 }
  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/fkissx/p/4503965.html
Copyright © 2011-2022 走看看