169. Majority Element
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.
分析:这周讲了分治算法,所以这周选一个分治算法相关的题目:找一组数组中的主要元素。主要思想是就是采用二分查找,递归的查找每一部分,找到左右两边的主要元素后,在对两个元素经行比较,如果相等,就返回。如果不相等就返回出现次数多的那个(调用C++中的count()函数统计次数)。代码如下:
class Solution {
public:int majorityElement(vector<int>& nums) {
return majority(nums, 0, nums.size() - 1);
}
public:int majority(vector<int>& nums,int left,int right){
if(left==right)
return nums[left];
int mid = left + ((right - left) >> 1);
int leftMaj=majority(nums,left,mid);
int rightMaj=majority(nums,mid+1,right);
if(leftMaj==rightMaj)
return leftMaj;
return count(nums.begin()+left,nums.begin()+right+1,leftMaj)>count(nums.begin()+left,nums.begin()+right+1,rightMaj)?leftMaj:rightMaj;
}
};