leetcode筆記:Majority Element
阿新 • • 發佈:2017-07-12
mar -- ava solution pty parent length lee app
。
;否則
一. 題目描寫敘述
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.
二. 題目分析
題目說到,給定一個數組。內含n
個元素。找出一個主元素,該元素在數組中出現的次數比其它元素出現的次數加起來還要多。即該元素的數量大於n/2
開始的思路,自然是對數組進行排序,數組最中間的元素就是主元素,但算法復雜度一般須要:O(nlogn)
;若同意輔助內存。可新建一個數組。用於存放不同元素值在數組中存放的次數。這樣僅僅需遍歷一次原數組,然後再遍歷一次記錄次數的數組就可找出主元素。算法復雜度為O(n)
。
一種高效的方法僅僅需遍歷一次數組就可以。
我們知道主元素出現的次數比其它元素出現的次數和還要大,因此,僅僅需使用兩個變量:candidate
和 count
這兩個變量記錄了元素candidate
的值,count
記錄了元素candidate
比其它元素多出現的次數。
遍歷數組,遇到與當前記錄元素candidate
同樣的元素值,++count
count
被抵消一次。--count
。當count
變為0
時,更換candidate
為當前遍歷所在的像素值。
由於遍歷完數組後,主元素被抵消的次數count
比然大於零,不會由於當count
變為0
而被其它數組元素替代。因此candidate
也僅僅會是主元素。
三. 演示樣例代碼
class Solution {
public:
int majorityElement(vector<int>& nums) {
int candidate = 0, count = 0;
for (int i = 0; i < nums.size(); ++i)
{
if (count == 0)
{
candidate = nums[i];
++count;
}
else
{
if (candidate == nums[i])
++count;
else
--count;
}
}
return candidate;
}
};
leetcode筆記:Majority Element