package com.fishercoder.solutions;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 954. Array of Doubled Pairs
 *
 * Given an array of integers A with even length, return true if and only if it is possible to reorder it
 * such that A[2 * i + 1] = 2 * A[2 * i] for every 0 <= i < len(A) / 2.
 *
 * Example 1:
 * Input: [3,1,3,6]
 * Output: false
 *
 * Example 2:
 * Input: [2,1,2,6]
 * Output: false
 *
 * Example 3:
 * Input: [4,-2,2,-4]
 * Output: true
 * Explanation: We can take two groups, [-2,-4] and [2,4] to form [-2,-4,2,4] or [2,4,-2,-4].
 *
 * Example 4:
 * Input: [1,2,4,16,8,4]
 * Output: false
 *
 * Note:
 * 0 <= A.length <= 30000
 * A.length is even
 * -100000 <= A[i] <= 100000
 * */
public class _954 {
    public static class Solution1 {
        public boolean canReorderDoubled(int[] A) {
            for (int i = 0; i < A.length; i++) {
                if (A[i] < 0) {
                    A[i] = -A[i];
                }
            }
            Arrays.sort(A);
            Map<Integer, Integer> map = new HashMap<>();
            for (int num : A) {
                map.put(num, map.getOrDefault(num, 0) + 1);
            }
            for (int num : A) {
                if (num != 0) {
                    if (map.get(num) < 0) {
                        return false;
                    } else if (map.get(num) == 0) {
                        continue;
                    } else {
                        int count = map.get(num);
                        map.put(num, 0);
                        int doubleNum = num * 2;
                        if (!map.containsKey(doubleNum)) {
                            return false;
                        } else {
                            map.put(doubleNum, map.get(doubleNum) - count);
                        }
                    }
                } else if (map.get(num) % 2 != 0) {
                    return false;
                }
            }
            return true;
        }
    }
}

@@ -107,633 +107,8 @@
 p;%0A%0A
-/**%0A * 954. Array of Doubled Pairs%0A *%0A * Given an array of integers A with even length, return true if and only if it is possible to reorder it%0A * such that A%5B2 * i + 1%5D = 2 * A%5B2 * i%5D for every 0 %3C= i %3C len(A) / 2.%0A *%0A * Example 1:%0A * Input: %5B3,1,3,6%5D%0A * Output: false%0A *%0A * Example 2:%0A * Input: %5B2,1,2,6%5D%0A * Output: false%0A *%0A * Example 3:%0A * Input: %5B4,-2,2,-4%5D%0A * Output: true%0A * Explanation: We can take two groups, %5B-2,-4%5D and %5B2,4%5D to form %5B-2,-4,2,4%5D or %5B2,4,-2,-4%5D.%0A *%0A * Example 4:%0A * Input: %5B1,2,4,16,8,4%5D%0A * Output: false%0A *%0A * Note:%0A * 0 %3C= A.length %3C= 30000%0A * A.length is even%0A * -100000 %3C= A%5Bi%5D %3C= 100000%0A * */%0A
 publ

refactor 954