原文鏈接:https://www.fanhaobai.com/2017/04/array-form-max-string.html
給定一個所有元素為非負(fù)的數(shù)組,將數(shù)組中的所有數(shù)字連接起來,求最大的那個數(shù)。
示例:
輸入:
4,94,9,14,1
輸出:
9944141
輸入:
121,89,98,15,4,3451
輸出:
98894345115121
比較規(guī)則:分析 a 和 b 的排列,因?yàn)檫@ 2 個數(shù)存在 2 種排列情況,既 a_b
和 b_a
,若 a_b
組合值大于 b_a
組合,那么認(rèn)為 a “大于” b,則 a 需要排列在 b 前面,反之則需要交換 a 和 b 的位置。同我們熟悉的排序算法唯一不同的是,這里不是直接通過比較 2 個元素值大小,而是需要通過排列后的 2 個新值進(jìn)行大小比較。
排序算法:由于只是比較規(guī)則的不同,所以常用的排序算法(冒泡、快速、堆)一樣適用。
這里使用冒泡排序來進(jìn)行說明,每一趟找出待排序元素的最小值,算法執(zhí)行流程如下:
定義比較規(guī)則,ab 和 ba 組合后的數(shù)字進(jìn)行值大小的比較:
1 | function ($a, $b) { |
接收輸入并輸出結(jié)果:
1 | function array_form_max_str(array $Arr) { |
原文:大專欄 求數(shù)組中元素組合的最大字符串(轉(zhuǎn))