Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

 

Moore voting algorithm

每找出两个不同的element,就成对删除即count--,最终剩下的一定就是所求的。时间复杂度:O(n)

 1   class Solution {
 2   public:
 3       int majorityElement(vector<int> &num) {
 4   
 5           int elem = 0;
 6           int count = 0;
 7           
 8           for(int i = 0; i < num.size(); i++)  {
 9               
10              if(count == 0)  {
11                  elem = num[i];
12                  count = 1;
13              }
14              else    {
15                  if(elem == num[i])
16                      count++;
17                  else
18                      count--;
19              }
20              
21          }
22          return elem;
23      }
24 };

 

随机挑选一个元素,检查是否是多数元素。时间复杂度:Average:O(n)。期望查找次数 <2

 1 class Solution {
 2  public:
 3      int majorityElement(vector<int> &num) {
 4  
 5          int count = 0;
 6          
 7          for(;;) {
 8              if(num.size() == 1)
 9                  return num[0];
10              else    {
11                  int i = rand() % (num.size() - 1);
12                  for(int j = 0; j < num.size(); j++) {
13                      if(num[j] == num[i])
14                         count++;
15                  }
16                  if(count > (num.size() / 2))
17                      return num[i];
18                  else    {
19                      count = 0;
20                      continue;
21                  }
22              }
23          }
24      }
25  };

 

posted on 2015-04-18 19:59  黄瓜小肥皂  阅读(143)  评论(0编辑  收藏  举报