169.ほとんどの要素(C ++)
1つのトピックの説明
サイズnの配列が与えられた場合、その中のほとんどの要素を見つけます。ほとんどの要素は、配列内で⌊n/2⌋より多く表示される要素を参照します。
配列は空ではなく、特定の配列には常に要素の大部分が存在すると想定できます。
2説明例
2.1例1
入力:[3,2,3]
出力:3
2.2例2
入力:[2,2,1,1,1,2,2]
出力:2
3問題解決のヒント
この問題を解決するには、時間計算量O(n)と空間計算量O(1)のアルゴリズムを設計してみてください。
4問題解決のアイデア
最初の要素を候補として取り、最初から配列をトラバースします。同じ要素に遭遇した場合は、賛成票を投じます。それ以外の場合は、反対票を投じ、投票数を0に減らすかどうかを決定します。投票数が0に減ったということは、投票の前の部分がちょうど相殺されたことを意味します。1つの要素が候補として機能します。
5詳細なソースコード(C ++)
class Solution {
public:
int majorityElement(vector<int>& nums) {
int res= nums[0] ;
int count = 1 ;
for ( int i = 1 ; i < nums.size() ; i ++ )
{
if ( nums[i] == res )
{
count ++ ;
}
else
{
count -- ;
if ( count == 0 )
{
res = nums[i + 1] ;
}
}
}
return res ;
}
};