一. 题目:Majority Element
Given an array of sizen, find the majority element. The majority element
is the element that appearsmore than⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
二. 思路分析
题目要求选出一个数组中出现次数最多的那一个数,可以使用分治算法的思想,将数组分成两个部分,分别找出这两部分中出现次数最多的数,记为A和B,如果A等于B,则返回A,如果A不等于B,则A和B都是最终结果的候选,此时需要遍历整个数组考察A和B出现的次数,出现次数较多的就是最终返回的结果。
class Solution {
public:
int majorityElement(vector<int>& nums) {
if(nums.size()==1) return nums[0];
vector<int> vec1(nums.begin(),nums.begin()+nums.size()/2);
int x=majorityElement(vec1);
vector<int> vec2(nums.begin()+nums.size()/2,nums.end());
int y=majorityElement(vec2);
if(x==y) return x;
else{
int cnt=0;
for(int i=0;i<nums.size();++i)
if(x==nums[i]) cnt++;
if(cnt>nums.size()/2) return x;
return y;
}
}
};
三. 总结
算法复杂度T(n) = 2T(n/2) + O(n),所以T(n) = O(nlogn)。