समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो संख्याओं की एक सरणी arr को पहले और एकमात्र आर्गुमेंट के रूप में लेता है।
सरणी arr हमेशा सम लंबाई की होगी।
हमारे फ़ंक्शन को true वापस करना चाहिए यदि और केवल यदि इसे पुनः क्रमबद्ध करना संभव है जैसे कि arr[2 * i + 1] = 2 * arr[2 * i] हर 0 <= i < length(arr) / 2 के लिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
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