菜鳥刷題之路 Q27 移除K個數字

2021-10-10 14:05:57 字數 916 閱讀 4173

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

注意:

分析:本題使用貪心加單調棧的方式,刪除k個數即保證在刪除到k個數之前,我刪除的數都是較大的數。貪心策略就是使用單調棧。具體的流程**的注釋有解釋。

class

solution

// 當壓入的數小於棧頂,或者壓入的數已經完成了彈棧過程我們就可以考慮把它壓入棧,但是如果這個數是0且當棧為空,即這個零是前導零,那麼就不用把它壓入,否則壓入

if(nextval !=

'0'||

!stack.

isempty()

) stack.

push

(nextval);}

// 當數全部被壓入,但是k卻沒有為0,則說明整個陣列是單調遞增,則刪除最後k個元素

while

(--k >=

0) stack.

pop();

if(stack.

isempty()

)return

"0";

char

res =

newchar

[stack.

size()

];for(

int i = res.length-

1; i >=

0; i--

) res[i]

= stack.

pop();

return

newstring

(res);}

}

結果:

菜鳥刷題之路 Q1

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。一開始考慮轉化成位來計算,但是這樣 結構非常複雜且當出現負數時就難以計算。之後轉化思維,從十進位制數字計算的本身上來看 兩個數 ab cd 的計算過程可以看成是 a c e,b d f,如果e,f大於10,就保留ef 的個位數。如果出...

菜鳥刷題之路 Q13

問題來自牛客劍指offer 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。問題和尋找發帖水王屬於同一問題。即尋找眾數。問題可以看成是對陣列中的數進行計數。利用hashmap來作...

菜鳥刷題之路 Q16

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。問題用hashmap解決是很容易想到的。使用異或運算的特點也可以解決該問題。將陣列的值作為key存入hashmap 1 當該值存在於hashmap中,刪除它 2 當該值不存在加入它 最後整個hashmap中剩...