समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो दो संख्याएं लेता है, मान लीजिए उन्हें 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));कोड व्याख्या:
हमने यहां स्टैक का उपयोग करके लालची एल्गोरिदम का उपयोग किया है। इनपुट स्ट्रिंग num के प्रत्येक मान el के लिए बाएं-से-दाएं, हम el को स्टैक पर पुश करते हैं जब तक हम स्टैक से el से बड़े अधिकतम n मान नहीं हटा देते।
चूंकि संख्या के बाएं-मोस्ट स्थान दाएं-मोस्ट स्थानों की तुलना में अधिक मूल्यवान होते हैं, यह लालची दृष्टिकोण सुनिश्चित करता है कि बाएं-मोस्ट स्थान सबसे छोटे अंकों से बने हों, और स्टैक में जो बचा है वह दाएं-मोस्ट स्थानों में सबसे बड़े अंक हैं।
इनपुट स्ट्रिंग m के संसाधित होने के बाद यदि हटाने के लिए कोई शेष n अंक हैं, तो दाएं-मोस्ट n अंक हटा दें, क्योंकि दाएं-मोस्ट n अंक सबसे बड़े अंक हैं।
आउटपुट
कंसोल में आउटपुट होगा:
44557