给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 “对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 * arr[2 * i]” 时,返回 true;否则,返回 false。
示例 1:
输入:arr = [3,1,3,6]
输出:false
示例 2:输入:arr = [2,1,2,6]
输出:false
示例 3:输入:arr = [4,-2,2,-4]
输出:true
解释:可以用 [-2,-4] 和 [2,4] 这两组组成 [-2,-4,2,4] 或是 [2,4,-2,-4]
提示:
0 <= arr.length <= 3 * 104
arr.length 是偶数
-105 <= arr[i] <= 105
class Solution {
public:
bool canReorderDoubled(vector<int>& arr) {
map<float, float> m;
for (int i = 0; i < arr.size(); ++i)
m[arr[i]]++;
for (map<float, float>::iterator it = m.begin(); it != m.end(); ++it){
if (it->second < 0) return false;
if (it->second == 0) continue;
if (it->first > 0){
if (!m.count(it->first * 2)) return false;
m[it->first*2] -= it->second;
}else{
if (!m.count(it->first / 2.0)) return false;
m[it->first/2.0] -= it->second;
}
}
return true;
}
};