移除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

更新於:2021年3月18日

246 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.