2016-09-07 12 views
-5

擦除n個數字例如,對於數9511145後的最大數量,如果我想從這個數字的最大數目將是9545刪除3個位數。刪除的數字不必是連續的。但其餘數字的相對位置應保持不變。數字長度可以是10位。爲了在迭代方法中解決這個問題,可能需要O(N )時間。如果任何人可以提出任何更好的方法來解決這個問題,那麼這將是一個很大的幫助。如何從數量

+1

數字是如何表示的?我很努力地想知道如何以O(N^2)方式結束。 –

+0

未被擦除的數字序列應該保持相同的答案嗎? –

+1

似乎類似這樣的問題:http://stackoverflow.com/questions/28223580/how-to-get-the-least-number-after-deleting-k-digits-from-the-input-number,它嘗試找到最小值。 –

回答

0

解決這個問題已經回答了精美here。 唯一的區別是你必須保持堆棧的順序遞減。

# process digits from left to right 
for each digit from left to right 
    if digit <= top of the stack 
    push(digit) 
    continue 
    while (digit > top of the stack) and (we have enough digits to reach n-k digits) 
    pop() 
    push(digit) 
pop extra digits 

9511145 
push(9) => 9 
push(5) because 5 <= 9 => 95 
push(1) because 1 <= 5 => 951 
push(1) because 1 <= 1 => 9511 
push(1) because 1 <= 1 => 95111 
pop() because 4 > 1 and we can still end up with 4 digits => 9511 
pop() because 4 > 1 and we can still end up with 4 digits => 951 
pop() because 4 > 1 and we can still end up with 4 digits => 95 
push(4) because 4 <= 5 => 954 
push(5) because we need to have 4 digits at least => 9545 

注意:upvote original answer

+0

第二個最後的原因(4 <5)似乎是錯誤的。因爲即使你有6個而不是4個,你仍然需要追加最後兩個數字來使長度爲4位的數字。 –

+0

謝謝哥哥。@ sudonakeinstall2 –

+0

真棒解釋。但我的名譽不允許我投了你的解決方案。它是我的運氣不好..感謝 –