समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो एकल अंक संख्याओं की दो सरणियों को लेता है जो दो संख्याओं का प्रतिनिधित्व करती हैं, arr1 और arr2 पहले और दूसरे आर्गुमेंट के रूप में। फ़ंक्शन का तीसरा आर्गुमेंट एक संख्या होगी,
num (num <= arr1 की लंबाई + arr2 की लंबाई)
हमारे फ़ंक्शन को एकल अंक संख्याओं की एक नई सरणी वापस करनी चाहिए जिसकी लंबाई num हो, जो अपने आप में एक संख्या का प्रतिनिधित्व करती है। और संख्या दोनों सरणियों के तत्वों का उपयोग करके बनाई जा सकने वाली अधिकतम संख्या होनी चाहिए, एकमात्र शर्त यह है कि हमें उसी सरणी के तत्वों के सापेक्ष क्रम को बनाए रखना होगा।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const arr1 = [1, 3, 4, 5, 6]; const arr2 = [9, 1, 2, 5, 8, 3]; const num = 4;
तो आउटपुट होना चाहिए -
const output = [9, 8, 6, 3];
उदाहरण
इसके लिए कोड होगा -
const arr1 = [1, 3, 4, 5, 6];
const arr2 = [9, 1, 2, 5, 8, 3];
const num = 4;
const maxArray = (arr1 = [], arr2 = [], num) => {
const map = new Map();
const match = (a, b, num) => {
if (map.has(a + ',' + b + ',' + num)) {
return map.get(a + ',' + b + ',' + num);
}
let output = [];
while(num > 0) {
let maxa = -Infinity;
let maxai = 0;
let maxb = -Infinity;
let maxbi = 0;
for(let i = a; i < arr1.length && arr1.length + arr2.length - (i + b) >= num; i++) {
if (arr1[i] > maxa) {
maxa = arr1[i];
maxai = i;
}
}
for(let i = b; i < arr2.length && arr1.length + arr2.length - (a + i) >= num; i++) {
if (arr2[i] > maxb) {
maxb = arr2[i];
maxbi = i;
}
}
if (maxa === maxb) {
output.push(maxa);
let ca = map.get(a+','+(maxbi+1)+','+(num-1)) || match(a, maxbi+1, num-1);
let cb = map.get((maxai+1)+','+b+','+(num-1)) || match(maxai+1,b,num-1);
map.set(a+','+(maxbi+1)+','+(num-1), ca);
map.set((maxai+1)+','+b+','+(num-1), cb);
if (ca.join('') > cb.join('')) {
return [...output, ...ca];
} else {
return [...output, ...cb];
}
} else if (maxa > maxb) {
output.push(maxa);
a = maxai + 1;
} else {
output.push(maxb);
b = maxbi + 1;
}
num--;
}
map.set(a + ',' + b + ',' + num, output);
return output;
}
return match(0, 0, num);
};
console.log(maxArray(arr1, arr2, num));
कोड व्याख्या:
हमने जो कदम उठाए हैं -
शेष num अनुमत होने तक फॉर-लूप का उपयोग किया।
यदि arr1 में arr2 से अधिक संख्या थी, तो हमने पहले arr1 की संख्या का उपयोग किया, अन्यथा हमने arr2 की संख्या का उपयोग किया।
जब arr1 और arr2 में फॉर-लूप की अनुमति तक समान संख्या थी, तो हमने केवल दो मानों की तुलना करने के लिए पुनरावृत्ति का उपयोग किया, और बड़ी संख्या को चुना।
आउटपुट
कंसोल में आउटपुट होगा -
[ 9, 8, 6, 3 ]