题目链接
题目描述
实现代码
实现思路:可以对数组进行排序,这里需要按照绝对值来进行排序,因为我们要按照从左往右进行x -> 2x的查找判断;然后我们需要保存每个数的出现次数,以便于后面进行x -> 2x判断时进行扣除;
实现代码:
class Solution {
public boolean canReorderDoubled(int[] arr) {
int len = arr.length;
Map<Integer, Integer> map = new HashMap<>(len << 1);
for (int val : arr) {
map.put(val, map.getOrDefault(val, 0) + 1);
}
List<Integer> list = new ArrayList<>(map.size());
for (int key : map.keySet()) {
list.add(key);
}
Collections.sort(list, (a, b) -> Math.abs(a) - Math.abs(b));
for (int key : list) {
int val = map.get(key);
int doubleVal = map.getOrDefault(key * 2, 0);
if (doubleVal < val) {
return false;
}
map.put(key * 2, doubleVal - val);
}
return true;
}
}