91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何把數組排成最小的數

發布時間:2021-12-15 13:47:31 來源:億速云 閱讀:164 作者:小新 欄目:大數據

這篇文章主要介紹LeetCode如何把數組排成最小的數,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!


題目描述

輸入一個非負整數數組,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。

  • 0 < nums.length <= 100
  • 輸出結果可能非常大,所以你需要返回一個字符串而不是整數
  • 拼接起來的數字可能會有前導 0,最后結果不需要去掉前導 0
         

題目樣例

         

示例

  • 輸入: [10,2]

  • 輸出: "102"

  • 輸入: [3,30,34,5,9]

  • 輸出: "3033459"

         

題目思考

  1. 怎么定義最小?
         

解決方案

         

思路

  • 分析題目, 要使得拼接起來的數字最小, 只有當各個拼接元素按照從小到大拼接起來才可以
  • 而這里的從小到大拼接, 不是指按照數字本身順序或者字典序從小到大拼接
  • 舉個例子, 90 和 902 的拼接結果應該是 90290, 但是 90 不管是數字還是字典序都小于 902
  • 那如何定義哪個數字作為拼接后的第一個數字呢?
  • 假如這個數字和任意其他數字拼接起來, 都小于將兩個數字互換后拼接的結果, 那么顯然這個數字就應該放在首位
  • 到這里就知道了, 我們應該自定義一個排序方法, 對于兩個數字 a 和 b 而言, 比較              str(a)+str(b) 與              str(b)+str(a) 的大小關系, 然后對整個列表排序后組成一個字符串即可
  • 下面的代碼使用兩種方案實現, 一種是快速排序, 一種是語言內置排序, 供大家參考
         

復雜度

  • 時間復雜度              O(NlogN)
    • 排序的時間復雜度
  • 空間復雜度              O(N)
    • 使用了額外的字符串數組
         

代碼

        
方案 1 - 自定義快速排序
class Solution:
    def minNumber(self, nums: List[int]) -> str:
        # 使用map將原數組的數字轉成字符串
        nums = list(map(str, nums))

        def quicksort(l, r):
            # 經典快速排序實現
            if l >= r:
                return
            pivot = nums[l]
            i, j = l, r
            while i < j:
                # 只需要把這里改成自定義的排序方法即可
                while i < j and nums[j] + pivot >= pivot + nums[j]:
                    j -= 1
                nums[i] = nums[j]
                # 只需要把這里改成自定義的排序方法即可
                while i < j and nums[i] + pivot <= pivot + nums[i]:
                    i += 1
                nums[j] = nums[i]
            nums[i] = pivot
            quicksort(l, i - 1)
            quicksort(i + 1, r)

        quicksort(0, len(nums) - 1)
        return ''.join(nums)
                     
方案 2 - 自定義內置排序
class Solution:
    def minNumber(self, nums: List[int]) -> str:
        class compare(str):
            def __lt__(self, x):
                return self + x < x + self

        # 使用python內置sorted的key, 傳入一個重載__lt__的類, 自定義排序
        return ''.join(sorted(map(str, nums), key=compare))

以上是“LeetCode如何把數組排成最小的數”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白朗县| 香格里拉县| 湘阴县| 通许县| 绥滨县| 丰宁| 孟州市| 西青区| 称多县| 宣恩县| 砀山县| 黎城县| 安庆市| 佛学| 虞城县| 融水| 仁怀市| 江津市| 甘孜县| 平塘县| 中宁县| 海淀区| 四平市| 福安市| 嘉峪关市| 乌审旗| 阿克苏市| 松溪县| 怀远县| 通许县| 景洪市| 淳安县| 泽普县| 从江县| 庆云县| 西贡区| 涟水县| 革吉县| 农安县| 永丰县| 桂阳县|