在 JavaScript 中重新排列数组的元素
问题
我们需要编写一个JavaScript函数,它接受一个数字数组arr作为第一个也是唯一的参数。
数组arr,将始终是偶数长度。
我们的函数应该返回true当且仅当可以重新排序它使得arr[2*i+1]=2*arr[2*i]对于每0<=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