刪除 k 個元素,使剩下的數字最小(單調棧)

2022-06-27 02:45:09 字數 774 閱讀 5868

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。

注意:num 的長度小於 10002 且 ≥ k。

num 不會包含任何前導零。

示例 1 :

輸入: num = "1432219", k = 3

輸出: "1219"

解釋: 移除掉三個數字 4, 3, 和 2 形成乙個新的最小的數字 1219。

示例 2 :

輸入: num = "10200", k = 1

輸出: "200"

解釋: 移掉首位的 1 剩下的數字為 200. 注意輸出不能有任何前導零。

示例 3 :

輸入: num = "10", k = 2

輸出: "0"

解釋: 從原數字移除所有的數字,剩餘為空就是0。

思路:單調棧即可,當刪除的元素個數 = k 時直接退出迴圈,若退出迴圈的時候個數 < k,則從末尾在刪掉一些元素,直至它的個數 = k

**:

class solution 

sta.push(num[i]);}};

while(cnt < k)

stackmid;

while(!sta.empty())

string ans = "";

while(!mid.empty())

while(!mid.empty())

if (ans.size() == 0) ans += '0';

return ans;

}};

刪除k個數字使剩下數字最小(大)

如 1593121212去掉3個數,剩下1121212最小。思路如下 刪除k個,可以採用貪心演算法,每次刪除1個 那麼每次刪哪乙個呢?此時我們已經能看出 要求剩下的數字最小,從左向右掃瞄,找出連續的非嚴格遞增串,刪除最後乙個 要求剩下的數字最大,從左向右掃瞄,找出連續的非嚴格遞減串,刪除最後乙個。核...

刪除K個數字,使剩下的數字串最大

題目 乙個n位的數,去掉其中的k位,問怎樣去掉使得留下來的那個 n k 位的數最大?分析 可以直接用貪心來求解,每次尋找從頭開始的連續遞減序列,刪除遞減序列的最後乙個元素,重複k次,最後剩下的數字串組成的數字最大。比如 13787323 第一次,遞減序列只有1,刪除1,得到3787323 第二次,遞...

查詢最小的k個元素

題目 輸入n個整數,輸出其中最小的k個。演算法思想,要是將n個數排序然後輸出前k個,方法很簡單,但計算量比較大,為o nlogn 要是新建乙個有k個元素陣列,在陣列不滿時,將每乙個輸入的資料存入陣列。若陣列滿了,則比較輸入的資料與陣列中最大元素的大小,來決定接下來幹什麼,接下來幹什麼,我語言表達能力...