Welcome to Subscribe On Youtube
954. Array of Doubled Pairs
Description
Given an integer array of even length arr, return true if it is possible to reorder arr such that arr[2 * i + 1] = 2 * arr[2 * i] for every 0 <= i < len(arr) / 2, or false otherwise.
Example 1:
Input: arr = [3,1,3,6] Output: false
Example 2:
Input: arr = [2,1,2,6] Output: false
Example 3:
Input: arr = [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].
Constraints:
2 <= arr.length <= 3 * 104arr.lengthis even.-105 <= arr[i] <= 105
Solutions
-
class Solution { public boolean canReorderDoubled(int[] arr) { Map<Integer, Integer> freq = new HashMap<>(); for (int v : arr) { freq.put(v, freq.getOrDefault(v, 0) + 1); } if ((freq.getOrDefault(0, 0) & 1) != 0) { return false; } List<Integer> keys = new ArrayList<>(freq.keySet()); keys.sort(Comparator.comparingInt(Math::abs)); for (int k : keys) { if (freq.getOrDefault(k << 1, 0) < freq.get(k)) { return false; } freq.put(k << 1, freq.getOrDefault(k << 1, 0) - freq.get(k)); } return true; } } -
class Solution { public: bool canReorderDoubled(vector<int>& arr) { unordered_map<int, int> freq; for (int& v : arr) ++freq[v]; if (freq[0] & 1) return false; vector<int> keys; for (auto& [k, _] : freq) keys.push_back(k); sort(keys.begin(), keys.end(), [](int a, int b) { return abs(a) < abs(b); }); for (int& k : keys) { if (freq[k * 2] < freq[k]) return false; freq[k * 2] -= freq[k]; } return true; } }; -
class Solution: def canReorderDoubled(self, arr: List[int]) -> bool: freq = Counter(arr) if freq[0] & 1: return False for x in sorted(freq, key=abs): if freq[x << 1] < freq[x]: return False freq[x << 1] -= freq[x] return True -
func canReorderDoubled(arr []int) bool { freq := make(map[int]int) for _, v := range arr { freq[v]++ } if freq[0]%2 != 0 { return false } var keys []int for k := range freq { keys = append(keys, k) } sort.Slice(keys, func(i, j int) bool { return abs(keys[i]) < abs(keys[j]) }) for _, k := range keys { if freq[k*2] < freq[k] { return false } freq[k*2] -= freq[k] } return true } func abs(x int) int { if x < 0 { return -x } return x }