今天刷到的这个题没用到啥经典的算法。主要思路就是找对子,用到的数据结构为哈希表
代码如下
class Solution {
public:
bool canReorderDoubled(vector<int>& arr) {
unordered_map<int,int> elem_cnt;
for(int &e: arr){
elem_cnt[e]++;
}
vector<int> vals;
for(auto &e: elem_cnt){
vals.push_back(e.first);
}
//升序排序
sort(vals.begin(),vals.end(), [](int a, int b) { return abs(a) < abs(b); });
if(elem_cnt[0]%2!=0){
return false;
}
for(int &e:vals){
if(elem_cnt[2*e]<elem_cnt[e]){
return false;
}else{
elem_cnt[2*e]-=elem_cnt[e];
}
}
return true;
}
};