954. Array of Doubled Pairs
O texto da tarefa é traduzido do russo para o idioma selecionado. O código permanece sem alterações.
Если задан inteiro array четной длины arr, return true, если можно переупорядочить arr так, чтобы arr[2 * i + 1] = 2 * arr[2 * i] для каждого 0 <= i < len(arr) / 2, или false в противном случае.
Exemplo:
Input: arr = [3,1,3,6]
Output: false
C# solução
correspondente/originalusing System;
using System.Collections.Generic;
public class Solution {
public bool CanReorderDoubled(int[] arr) {
Dictionary<int, int> count = new Dictionary<int, int>();
foreach (int num in arr) {
if (count.ContainsKey(num)) {
count[num]++;
} else {
count[num] = 1;
}
}
Array.Sort(arr, (a, b) => Math.Abs(a).CompareTo(Math.Abs(b)));
foreach (int num in arr) {
if (count[num] == 0) continue;
if (!count.ContainsKey(2 * num) || count[2 * num] == 0) return false;
count[num]--;
count[2 * num]--;
}
return true;
}
}
C++ solução
rascunho automático, revisar antes de enviar#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public bool CanReorderDoubled(vector<int>& arr) {
unordered_map<int, int> count = new unordered_map<int, int>();
foreach (int num in arr) {
if (count.count(num)) {
count[num]++;
} else {
count[num] = 1;
}
}
Array.Sort(arr, (a, b) => abs(a).CompareTo(abs(b)));
foreach (int num in arr) {
if (count[num] == 0) continue;
if (!count.count(2 * num) || count[2 * num] == 0) return false;
count[num]--;
count[2 * num]--;
}
return true;
}
}
Java solução
rascunho automático, revisar antes de enviarimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public boolean CanReorderDoubled(int[] arr) {
HashMap<int, int> count = new HashMap<int, int>();
foreach (int num in arr) {
if (count.containsKey(num)) {
count[num]++;
} else {
count[num] = 1;
}
}
Array.Sort(arr, (a, b) => Math.abs(a).CompareTo(Math.abs(b)));
foreach (int num in arr) {
if (count[num] == 0) continue;
if (!count.containsKey(2 * num) || count[2 * num] == 0) return false;
count[num]--;
count[2 * num]--;
}
return true;
}
}
JavaScript solução
correspondente/originalvar canReorderDoubled = function(arr) {
let count = new Map();
for (let num of arr) {
count.set(num, (count.get(num) || 0) + 1);
}
arr.sort((a, b) => Math.abs(a) - Math.abs(b));
for (let num of arr) {
if (count.get(num) === 0) continue;
if (count.get(num * 2) === 0) return false;
count.set(num, count.get(num) - 1);
count.set(num * 2, count.get(num * 2) - 1);
}
return true;
};
Go solução
correspondente/originalpackage main
import (
"sort"
)
func canReorderDoubled(arr []int) bool {
count := make(map[int]int)
for _, num := range arr {
count[num]++
}
sort.Slice(arr, func(i, j int) bool {
return abs(arr[i]) < abs(arr[j])
})
for _, num := range arr {
if count[num] == 0 {
continue
}
if count[2*num] == 0 {
return false
}
count[num]--
count[2*num]--
}
return true
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
Algorithm
Подсчитать частоту каждого elementа в arrayе.
Отсортировать array по абсолютным значениям elementов.
Для каждого elementа в отсортированном arrayе:
Проверить, можно ли сопоставить его с elementом, равным его удвоенному значению.
Уменьшить счетчик обоих elementов в словаре частот.
Если для каждого elementа можно find пару, вернуть true, иначе вернуть false.
😎
Vacancies for this task
vagas ativas with overlapping task tags are mostradas.
Ainda não há vagas ativas.