重新排列 JavaScript 数组中的元素
问题
我们需要编写一个 JavaScript 函数,它接受一个数字数组 arr 作为第 1 个也是唯一一个参数。
数组 arr 始终为偶数长度。
我们的函数应当返回 true,当且仅当可以对其重新排序,使得对于每个 0 <= i < length(arr) / 2,arr[2 * i + 1] = 2 * arr[2 * i]。
例如,如果函数的输入是 −
const arr = [4, -2, 2, -4];
那么输出应为 −
const output = true;
输出解释
我们可以把 [−2, −4] 和 [2, 4] 作为两组,形成 [−2, −4, 2, 4] 或 [2, 4, −2, −4]。
示例
代码将是 −
const arr = [4, -2, 2, -4];
const canRearrange = (arr = []) => {
const map = arr.reduce((acc, num) => {
acc[num] = (acc[num] || 0) + 1
return acc
}, {});
const keys = Object.keys(map)
.map(key => Number(key))
.sort((a, b) => a - b)
for (const key of keys) {
if (key < 0) {
while (map[key] > 0) {
if (map[key / 2] > 0) {
map[key] -= 1
map[key / 2] -= 1
} else {
return false
}
}
} else {
while (map[key] > 0) {
if (map[key * 2] > 0) {
map[key] -= 1
map[key * 2] -= 1
} else {
return false
}
}
}
}
return true
};
console.log(canRearrange(arr));输出
在控制台中输出将是 −
true
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP