題目
給定一個大小爲 n 的數組,找到其中的衆數。衆數是指在數組中出現次數大於⌊ n/2 ⌋的元素。
你可以假設數組是非空的,並且給定的數組總是存在衆數。
示例 1:
輸入: [3,2,3]
輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2]
輸出: 2
代碼實現
方法一:排序法
//Cpp
class Solution {
public:
int majorityElement(vector<int>& nums)
{
sort(nums.begin(),nums.end());
int k = 1, n = nums.size();
int Ans = nums[0];
for(int i = 1; i < n; ++i)
{
if(nums[i] == nums[i-1])
{
++k;
if(k > n / 2)
break;
}
else
{
k = 1;
Ans = nums[i];
}
}
return Ans;
}
};
方法二:摩爾投票法
//Cpp
class Solution {
public:
int majorityElement(vector<int>& nums)
{
int count = 1, Ans = nums[0];
for(int i = 1; i < nums.size(); ++i)
{
if(nums[i] == Ans)
++count;
else
--count;
if(count == 0)
{
++i;
Ans = nums[i];
++count;
}
if(count > nums.size() / 2)
break;
}
return Ans;
}
};
實驗結果
方法一:排序法
執行結果:通過
執行用時 :24 ms, 在所有 C++ 提交中擊敗了78.77%的用戶
內存消耗 :10.9 MB, 在所有 C++ 提交中擊敗了91.12%的用戶
方法二:摩爾投票法
執行結果:通過
執行用時 :16 ms, 在所有 C++ 提交中擊敗了98.49%的用戶
內存消耗 :10.8 MB, 在所有 C++ 提交中擊敗了97.00%的用戶