移除n位數字後的最小數字(JavaScript)
問題
我們需要編寫一個 JavaScript 函式,它接收兩個數字作為引數,我們分別稱它們為 m 和 n。
函式的任務是從數字 m 中移除 n 位數字,使得移除數字後的 m 是儘可能小的數字。最後,函式應該返回移除數字後的數字 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,在移除棧中最多 n 個大於 el 的值後,我們將 el 推入棧中。
由於數字的左端位置比右端位置更有價值,這種貪婪方法確保左端位置由最小數字組成,而棧中剩下的數字是右端位置的最大數字。
處理完輸入字串 m 後,如果還有剩餘的 n 位數字需要移除,則移除最右邊 n 位數字,因為最右邊 n 位數字是最大的數字。
輸出
控制檯輸出將是:
44557
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP