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.
思路一:如果数组的结构可以改变,那么可以对其进行排序,当一个元素出现次数大于数组一半数量时,排序之后中间的值就是所求;
思路二:数组中一个数出现的次数大于数组长度一半的情况下,利用遍历来保存数组中的两个值:数组中的一个数字,另一个是次数。
当遍历到下一个数字的时候,如果该数字与之前保存的数相同,次数加一,否则减一。
次数为零时,保存下一个数字并次数设为1。要找的数字多于数组一半的数量,因此要找的数字是最后一次将次数设为1的那个数。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int result = 0;
int times = 0;
for(int it = 0; it != nums.size(); ++it)
{
if(times == 0)
{
result = nums[it];
times = 1;
}
else if(nums[it] == result)
{
times++;
}
else
times--;
}
return result;
}
};