समस्या
जावास्क्रिप्ट फ़ंक्शन जो पहले और एकमात्र तर्क के रूप में शाब्दिक, गिरफ्तारी की एक सरणी लेता है। इस सरणी में कुछ डुप्लीकेट पास में रखे गए हैं।
हमारे फ़ंक्शन को सरणी के तत्वों को इस तरह पुनर्व्यवस्थित करना चाहिए कि सरणी में कोई भी दो तत्व समान न हों। हमारे फ़ंक्शन को पुनर्व्यवस्थित सरणी वापस करनी चाहिए, यह देखते हुए कि यह गारंटी है कि ऐसी व्यवस्था का कम से कम एक संभावित तरीका मौजूद है।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
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 ]