主元素majority-number

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。

样例

给出数组[1,1,1,1,2,2,2],返回 1

挑战

要求时间复杂度为O(n),空间复杂度为O(1).

解题思路:主元素问题还是一个比较经典的题目,相关的算法在这篇博客中讲述的非常清楚http://blog.csdn.net/sophie_wise8/article/details/7672781;

当然一个很简单的思路就是既然是主元素肯定在数列中出现了至少一半的次数以上,所以就有了如下的巧妙又简单的代码;

 1 class Solution {
 2 public:
 3     /**
 4      * @param nums: A list of integers
 5      * @return: The majority number
 6      */
 7     int majorityNumber(vector<int> nums) {
 8         // write your code here
 9         int x,count=0;
10         for(int i=0; i<nums.size();i++){
11             if(count==0){
12                 x=nums[i];
13                 count=1;
14             }else{
15                 nums[i]==x?count++:count--;
16             }
17         }
18         return x;
19     }
20 };
原文地址:https://www.cnblogs.com/wangnanabuaa/p/4987278.html