সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা দুটি সংখ্যায় নেয়, আসুন তাদের যথাক্রমে প্রথম এবং দ্বিতীয় আর্গুমেন্ট হিসাবে m এবং n বলি।
আমাদের ফাংশনের কাজ হল m সংখ্যা থেকে n ডিজিট মুছে ফেলা যাতে m সংখ্যাটি n ডিজিট মুছে ফেলার পর সম্ভাব্য সবচেয়ে ছোট সংখ্যা হয়। এবং পরিশেষে, ফাংশনটি সংখ্যাগুলি মুছে ফেলার পরে m সংখ্যাটি ফেরত দেবে।
উদাহরণস্বরূপ, যদি ফাংশনে ইনপুট হয় −
const m = '45456757'; const n = 3;
তারপর আউটপুট −
হওয়া উচিতconst output = '44557';
আউটপুট ব্যাখ্যা:
সম্ভাব্য ক্ষুদ্রতম সংখ্যা পেতে আমরা 5, 6 এবং 7 সংখ্যা সরিয়ে দিয়েছি।
উদাহরণ
এর জন্য কোড হবে −
const m = '45456757'; const n = 3; const removeDigits = (m, n, stack = []) => { let arr = m.split('').map(Number); for(let el of arr){ while (n && stack.length && el < stack[stack.length - 1]){ stack.pop(); --n; }; stack.push(el); }; let begin = stack.findIndex(el => el > 0); let end = stack.length - n; return (!stack.length || begin == -1 || begin == end) ? "0" : stack.slice(begin, end).join('').toString(); }; console.log(removeDigits(m, n));
কোড ব্যাখ্যা:
আমরা এখানে উত্তর প্রণয়নের জন্য একটি স্ট্যাক ব্যবহার করে একটি লোভী অ্যালগরিদম ব্যবহার করেছি। বাম থেকে ডানে ইনপুট স্ট্রিং সংখ্যার প্রতিটি মানের জন্য, আমরা স্ট্যাকের থেকে n পর্যন্ত মানগুলি সরিয়ে দেওয়ার পরে আমরা el-কে স্ট্যাকের দিকে ঠেলে দিই যা el-এর চেয়ে বড়৷
যেহেতু একটি সংখ্যার বাম-সর্বাধিক অবস্থানগুলি ডান-সর্বাধিক অবস্থানের চেয়ে বেশি মূল্যবান, এই লোভনীয় পদ্ধতিটি নিশ্চিত করে যে বাম-সর্বাধিক অবস্থানগুলি ক্ষুদ্রতম অঙ্কগুলির সমন্বয়ে গঠিত, এবং স্ট্যাকের মধ্যে যা কিছু অবশিষ্ট থাকে তা ডানদিকের সবচেয়ে বড় সংখ্যা- অধিকাংশ অবস্থান।
ইনপুট স্ট্রিং m প্রক্রিয়া করার পরে যদি অপসারণের জন্য অবশিষ্ট n সংখ্যা থাকে, তাহলে ডান-সবচেয়ে n সংখ্যাগুলি সরিয়ে ফেলুন, যেহেতু ডান-সবচেয়ে n সংখ্যাগুলি হল বৃহত্তম সংখ্যা৷
আউটপুট
এবং কনসোলে আউটপুট হবে −
44557