「ハッシュテーブル」954。2つ折りペア配列<LeetCode>

954.ダブルペアアレイ

中難易度32お気に入りの共有英語に切り替えて動的フィードバックを受け取る

偶数の長さの整数配列が与えられた A場合、 A 再編成後に「for each 0 <= i < len(A) / 2has  A[2 * i + 1] = 2 * A[2 * i]」が 満たされた true場合にのみ戻りfalseます。それ以外の場合は、を返し ます。

問題の解決策:分類+マップ(hash_mapを使用する必要がありますが、hash_mapがLeetCodeでエラーを報告する理由がわかりません)


class Solution {
public:
    //只找绝对值比自己小的,8 4 2 16  会true
    bool canReorderDoubled(vector<int>& A) {
        int n=A.size();
        if(!n)
            return true;

        sort(A.begin(),A.end());
        map<int,int>mp;
        for(int i : A) mp[i]++; 
        
        //map有序 
        for(int i=0;i<n;i++)
        {
            int match=-1;
            if(mp[A[i]]>0)
            {
                if(A[i]>0)//正数 从小到大 找*2的
                    match=A[i]*2;
                else//负数和0  绝对值从大到小,找/2的
                {
                    if(A[i]&1)
                        return false;
                    match=A[i]/2;
                }
                if(mp[A[i]]<=mp[match])
                {
                    mp[match]-=mp[A[i]];
                    mp[A[i]]=0;
                }else
                    return false;
            }
        }
        return true;
    }
};

ハッシュテーブルのアプリケーションは、実際にはほとんどの場合C ++ STL:hash_mapであり、それを使用する方法を学ぶだけです。hash_mapを理解したい場合は、hash_mapにアクセスしてください

おすすめ

転載: blog.csdn.net/Look_star/article/details/108967681