समस्या
JavaScript फ़ंक्शन जो पहले और एकमात्र आर्गुमेंट के रूप में literals की एक सरणी arr लेता है। इस सरणी में कुछ डुप्लिकेट आसन्न रूप से रखे गए हैं।
हमारे फ़ंक्शन को सरणी के तत्वों को इस तरह पुनर्व्यवस्थित करना चाहिए कि सरणी में कोई दो तत्व समान न हों। हमारे फ़ंक्शन को पुनर्व्यवस्थित सरणी वापस करनी चाहिए, यह देखते हुए कि ऐसी व्यवस्था का कम से कम एक संभावित तरीका मौजूद होने की गारंटी है।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const arr = [7, 7, 7, 8, 8, 8];
तो आउटपुट होना चाहिए -
const output = [7, 8, 7, 8, 7, 8];
आउटपुट व्याख्या:
अन्य सही संभावित पुनर्व्यवस्थाएं भी हो सकती हैं।
उदाहरण
इसके लिए कोड होगा -
const arr = [7, 7, 7, 8, 8, 8];
const rearrangeArray = (arr = []) => {
const map = arr.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
const keys = Object.keys(map).sort((a, b) => map[a] - map[b]);
const res = [];
let key = keys.pop();
for(let i = 0; i < arr.length; i += 2){
if(map[key] <= 0){
key = keys.pop();
};
map[key] -= 1;
res[i] = Number(key);
};
for(let i = 1; i < arr.length; i += 2){
if(map[key] <= 0){
key = keys.pop();
};
map[key] -= 1;
res[i] = Number(key);
};
return res;
};
console.log(rearrangeArray(arr));
आउटपुट
कंसोल में आउटपुट होगा -
[ 8, 7, 8, 7, 8, 7 ]