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.
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
int majorN;
if(n%2==0)
majorN=n/2;
else
majorN=n/2+1;
int candidate=nums[0];
int count=1;
vector<int>::iterator it;
for(it=nums.begin()+1;it!=nums.end();it++){
if(*it==candidate)
{
count++;
if(count==majorN)
return candidate;
}
else
{
candidate=*it;
count=1;
}
}
return candidate;
}
};
时间复杂度: O(n log n) — 排序: 在排序后找出连续重复出现次数最多的元素。
更快捷的方法参考:
http://bookshadow.com/weblog/2014/12/22/leetcode-majority-element/
---------
“投票算法”,设定两个变量candidate和count。candidate保存当前可能的候选众数,count保存该候选众数的出现次数。
遍历数组num。
如果当前的数字e与候选众数candidate相同,则将计数count + 1
否则,如果当前的候选众数candidate为空,或者count为0,则将候选众数candidate的值置为e,并将计数count置为1。
否则,将计数count - 1
最终留下的候选众数candidate即为最终答案。
以上算法时间复杂度为O(n),空间复杂度为O(1)
class Solution:
# @param num, a list of integers
# @return an integer
def majorityElement(self, num):
candidate, count = None, 0
for e in num:
if count == 0:
candidate, count = e, 1
elif e == candidate:
count += 1
else:
count -= 1
return candidate