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.
解题思路:刚开始的想法是直接对已有数组进行排序,但是这样做会改变原有数组,而且时间复杂度为O(n*logn)。具体代码如下:
class Solution {
public:
int majorityElement(vector<int> &num) {
sort(num.begin(),num.end());
return num[num.size()/2];
}
};
还有一种做法就是遍历整个数组,设置一个计数器,令第一个元素为待选元素,当下一元素和待选元素相同时,就++,不同时就--。若计数器为零,则更换待选元素。具体代码如下:
class Solution {
public:
int majorityElement(vector<int> &num) {
int times = 0;
int element = 0;
for(int i=0;i<num.size();++i)
{
if(times == 0)
{
element = num[i];
times = 1;
}
else
{
if(element == num[i])
++times;
else
--times;
}
}
return element;
}
};