中難易度32お気に入りの共有英語に切り替えて動的フィードバックを受け取る
偶数の長さの整数配列が与えられた A
場合、 A
再編成後に「for each 0 <= i < len(A) / 2
has 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にアクセスしてください。