题目链接
题目描述
实现代码
实现思路:可以对数组进行排序,这里需要按照绝对值来进行排序,因为我们要按照从左往右进行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;}}
