179. 最大數
劍指 offer 45. 把陣列排成最小的數
給定一組非負整數 nums,重新排列它們每個數字的順序(每個數字不可拆分)使之組成乙個最大的整數。
注意:輸出結果可能非常大,所以你需要返回乙個字串而不是整數。
示例 1:
輸入:nums = [10,2]示例 2:輸出:「210」
輸入:nums = [3,30,34,5,9]示例 3:輸出:「9534330」
輸入:nums = [1]示例 4:輸出:「1」
輸入:nums = [10]1 <= nums.length <= 100輸出:「10」
0 <= nums[i] <= 109
剛一開始這個題我是不會做的,只能靠看看別人的題解勉強過日子,就這個樣子。
我能看懂的也就是呼叫arrays.sort函式並且自定義比較函式介面以及使用快排自定義排序。
這裡我們就用一下快排,下面的圖是演算法導論上的快排模板
}我們想一想,怎麼排這個陣列,才能讓它的結果是最大的呢?
[3,30,34,5,9]
首先是直觀上來說,我們一定要把9
放在第一位,5
放在第二位,這是毋庸置疑的。比如我們有乙個陣列[1, 2, 3, 4, 5, 6, 7, 8, 9]
,要你你怎麼排?自然是排成[9, 8, 7, 6, 5, 4, 3, 2, 1]
。
所以我們先排一下,[9, 5, 3, 30, 34]
,那麼問題又出現了,3、30、34
之間應該怎麼排序呢?
所以3、30、34
應該排成34330
這種形式。
那麼我們如何確定5應該放在這些3開頭的數字之前呢?也是一樣的,5與任何3開頭的數字組合在一起,一定是5開頭的最大。比如5
和34
放在一起,一定是534
>345
。
這樣排序規則就很清晰了,只要xy(組合成字串)大於yx,那麼x就應該放在y前面。
所以整個快排模板幾乎不用動,我們只需要改變partition
裡面的比較規則即可:
for
(int i = index; i <= right; i++
)}
我們設array[i]的字串為x,array[pivot]的字串為y,
如果xy > yx,則將x放在左邊,這一次遍歷後效果應該是類似於下圖
只是個類似,數量都不對應。
只要知道了怎麼排,知道了比較的條件,寫快排應該還是很容易的。
leetcode筆記 179最大數
題目 給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210示例 2 輸入 3,30,34,5,9 輸出 9534330說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。本題的思路是首先將整數陣列轉化為字串陣列,然後使用comparator介面,...
leetcode 179 題 最大數
leetcode 179 題 題目 最大數 題目描述 給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210 示例 2 輸入 3,30,34,5,9 輸出 9534330 說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。解決思路 arrays....
leetcode題 179 最大數(中等)
一 題目描述 179.最大數 中等 給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210 示例 2 輸入 3,30,34,5,9 輸出 9534330 說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。二 解題思路 對陣列進行排序,排序的比較函...