[LeetCode] 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 ;
    }
};

おすすめ

転載: blog.csdn.net/Gyangxixi/article/details/114368753