সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা দুটি একক অঙ্কের সংখ্যা অ্যারে (arr1, arr2) নেবে যা দুটি সংখ্যা রিপ্রেজেন্ট করে। তৃতীয় আর্গুমেন্ট হবে একটি সংখ্যা num (num ≤ arr1.length + arr2.length)।
ফাংশনটি 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-এর সংখ্যাটি আগে ব্যবহার করা হয়েছে।
• যখন arr1 ও arr2-এ একই সংখ্যা থাকে, রিকার্শন দিয়ে দুটি পথ তুলনা করে বড়টি বেছে নেওয়া হয়েছে।
আউটপুট
কনসোলে আউটপুট হবে –
[ 9, 8, 6, 3 ]