從一串數字裡刪除k個數字,使得新的那串數字最小

2021-09-02 02:33:07 字數 995 閱讀 2837

最近接觸一道有趣的演算法題,意思是:給定一串數字,這串數字有可能大於long的最長長度,譬如12542670021,從這串數字中刪除k個數字,使得新數字串在所有可能性結果中最小,那麼應該刪除哪k個數字呢?

下面給出思路和**,以及**的優化。

當然,數字的大小高位影響最大,所以首先考慮的是最高為,即從最左邊開始。12

5426

7002

1如果這裡k=1,顯然刪除數字5,會得到最小值,即12

4267

0021

如果再繼續刪除乙個呢?將會是刪除數字4,即12

2670

021

從上面結果來看,邏輯思路是從左到右遍歷判斷左邊的是否大於右邊的,如果大於,則刪掉,否則,就儲存。

當刪除第三個數字時,就會判斷1<2,儲存;2=2,儲存;2<6,儲存;6<7,儲存;7>0,刪除7,即12

3600

21**如下:

public static string removekdigits(string num, int k)

} //如果沒有找到要刪除的數字

if(!hascut)

//清除最前面的0

numnew = removezero(numnew); }

//如果整數所有數字都被刪除,則直接返回0

if(numnew.length()==0)

return numnew;

}private static string removezero(string numnew)

stack[top] = c;

top++; }

int offset = 0;

while(offset < newlength && stack[offset]=='0')

return offset==newlength?"0":new string(stack, offset, newlength-offset);

}

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

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

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

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

算一串數字的entropy 數字

醫生,你確定我沒事嗎?要不要再做個檢查,核磁共振什麼的?金陵市第一腦科醫院內,李宇緊攥著醫生的雙手,滿臉緊張地問道。真沒什麼事兒,開點藥吃吃就行了。可能是最近壓力過大,回去注意休息,多喝喝開水,過一陣子就沒事了。中年醫生低著頭寫病歷,看也不看李宇,自顧自地說道。可是 李宇剛要再說些什麼,就被醫生塞過...