2016-03-02 77 views
0

我在考試中遇到過問題。給出一組重複數字,請如何刪除一個重複數字以獲得最大值。 例如:112233刪除任何一個數字,即:刪除一個1或一個2或一個3,並返回最大數量。如何有效地完成此操作。一個是強力。從整數重複數字組中刪除一個重複數字以獲得最大值

+0

重複數字是否總是聚集在一起?那意味着你可以擁有321123這樣的號碼嗎? – user3437460

+0

總是在一起 –

回答

-1

從重複數字的組從整數中刪除一個重複的數字,以獲得最大

爲了保證最大的,我們請從左邊的最小重複的數字。我們不必執行暴力。

測試的112233:

12233 //remove 1 (remove smallest from left) [formed largest] 
11233 //remove 2 
11223 //remove 3 

測試的332211:

33221 //remove 1 (remove smallest from left) [formed largest] 
33211 //remove 2 
32211 //remove 3 

測試的221133:

22133 //remove 1 (remove smallest from left) [formed largest] 
21133 //remove 2 
22113 //remove 3 
+0

如果數字是12553664,該怎麼辦? 刪除5將導致1253664小於1255364(通過刪除6得到) – SyncMaster

0

您必須刪除第一個重複數字,後面跟着一個更大的數字。這樣可以增加可以增加的最有效數字,從而達到最大值。

+0

你是對的。但是如果我們找不到這樣一個數字,那麼我們應該從右到左遍歷,找到第一個重複數字,然後是一個更小的數字。 – SyncMaster

-1
  1. 從左到右遍歷。找到第一個重複的數字,後面跟着一個更大的數字。如果能找到一個,請將其刪除並返回該號碼(例如:122334)

  2. 從右向左遍歷。找到第一個重複的數字後跟一個較小的數字。如果你能找到一個,請將其刪除並返回該號碼。例如,在455233中,當我們從右到左遍歷時,'2'是一個較小的數字,後面跟着重複的數字'3'。

  3. 找到最後一個重複的數字,將其刪除並返回號碼(如:433221)

  4. 如果沒有重複數字,返回數字

幾個例子:

122334 - 在第1步中刪除。刪除2以獲得最大數字(12334)

455233 - 在第2步中落入。刪除2以獲得最大麻木ER(45533)

12553664 - 瀑布下2步。卸下6中拿到最大數(1255364)

433221 - 瀑布下步。卸下2中得到最大數(43321)

332211 - 在步驟3下落。刪除1以獲得最大數字(33221)

+0

'從右向左遍歷。找到第一個重複的數字後跟一個較小的數字。如果你能找到一個,刪除它並返回數字'332211'的測試用例會給你'32211'而不是'33221'的正確輸出。 – user3437460

+0

@ user3437460我想你誤解了我的邏輯。請記住,您正在從右向左移動。所以在332211的情況下,你不會找到一個重複的數字,後面跟着一個較小的數字(從右到左,而不是從左到右)。這將歸入第3步。 – SyncMaster