Vấn đề
Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng số, arr, làm đối số đầu tiên và duy nhất.
Arr của mảng, sẽ luôn có độ dài chẵn.
Hàm của chúng ta sẽ trả về true nếu và chỉ khi có thể sắp xếp lại nó sao cho arr [2 * i + 1] =2 * arr [2 * i] với mọi 0 <=i
Ví dụ:nếu đầu vào của hàm là -
Sau đó, kết quả đầu ra phải là -
Chúng ta có thể lấy hai nhóm [-2, -4] và [2,4] để tạo thành [-2, -4,2,4] hoặc [2,4, -2, -4].
Mã cho điều này sẽ là -
Và đầu ra trong bảng điều khiển sẽ là - const arr = [4, -2, 2, -4];
const output = true;
Giải thích đầu ra
Ví dụ
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));
Đầu ra
true