摘要:文章為原創(chuàng)首發(fā)地址描述給出一組非負(fù)整數(shù),重新排列他們的順序把他們組成一個(gè)最大的整數(shù)。算法每個(gè)元素逐個(gè)字符進(jìn)行對(duì)比。代碼代碼測試以上代碼已放到的上開源,歡迎或提建議。運(yùn)行即可以測試。
文章為原創(chuàng)首發(fā)地址:https://hooyes.net/p/python-l...描述
給出一組非負(fù)整數(shù),重新排列他們的順序把他們組成一個(gè)最大的整數(shù)。
例 給出 [1, 20, 23, 4, 8],返回組合最大的整數(shù)應(yīng)為 8423201 給出 [1, 201, 20, 9, 8],返回組合最大的整數(shù)應(yīng)為 98202011 給出 [1, 203, 20, 9, 8],返回組合最大的整數(shù)應(yīng)為 98203201算法
我給簡單好理解的兩個(gè)排序算法:
算法1:
先把對(duì)比的數(shù)字轉(zhuǎn)成字符,拼接后再轉(zhuǎn)成整數(shù)進(jìn)行大小對(duì)比,即 int(a+b) 與 int(b+a) 進(jìn)行降序排列。代碼1。
算法2:
每個(gè)元素逐個(gè)字符進(jìn)行對(duì)比。代碼2。
代碼1# Python2 class Solution: def largestNumber(self, nums): scmp = lambda a,b: int(b+a)-int(a+b) res = "".join(sorted(map(str, nums), cmp=scmp)).lstrip("0") return res or "0"
# Python3 from functools import cmp_to_key class Solution: def largestNumber(self, nums): key = cmp_to_key(lambda a,b: int(b+a)-int(a+b)) res = "".join(sorted(map(str, nums), key=key)).lstrip("0") return res or "0"代碼2
# Python2 class Solution: def largestNumber(self,nums): def cxx(x,y): i = 0 sx= str(x) sy= str(y) while i< len(str(min(x,y))): if sx[i] > sy[i]: return 1 elif sx[i] < sy[i]: return -1 elif x == y: return 0 i+=1 if i == len(sx): return -1 if sy[i]>sy[0] else 1 if i == len(sy): return 1 if sx[i]>sx[0] else -1 nx = sorted(nums,cmp=lambda x,y:cxx(x,y),reverse=True) res = "".join(map(str, nx)).lstrip("0") return res or "0"測試
t = Solution() print(t.largestNumber([1, 20, 23, 4, 8])) // 8423201
以上代碼已放到Hooyes的Github上開源,歡迎Fork或提建議。
largest-number.py
運(yùn)行 python largest-number.py 即可以測試。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/41520.html
摘要:示例輸入輸出示例輸入輸出示例輸入輸出示例輸入輸出思路貪心給定一組非負(fù)數(shù),重新排列使其組成一個(gè)最大的整數(shù)。具體過程如下自定義排序規(guī)則函數(shù),將數(shù)組按照自定義排序規(guī)則重新排序。時(shí)間復(fù)雜度分析排序的時(shí)間復(fù)雜度為。 ...
摘要:寫在前面今天的小李的目標(biāo)是排序算法,果然還是要下手寫才會(huì)更有體會(huì),也更記得住。排序算法冒泡排序主要是比對(duì)相鄰兩個(gè)數(shù)之間的大小關(guān)系,不斷將較大值交換至最后。 寫在前面 今天的小李的目標(biāo)是排序算法,果然還是要下手寫才會(huì)更有體會(huì),也更記得住。 認(rèn)真做題的分割線 第一題 215. 數(shù)組中的第K個(gè)最大元素難度:中等在未排序的數(shù)組中找到第k個(gè)最大的元素。請(qǐng)注意,你需要找的是數(shù)組排序后的第k個(gè)最大的...
摘要:數(shù)組有以下特點(diǎn)無類型數(shù)組元素可以是任意元素。因此,當(dāng)小于數(shù)組最大索引時(shí),大于的數(shù)組元素會(huì)被刪除。原數(shù)組不會(huì)改變將數(shù)組元素轉(zhuǎn)換為字符串并連接在一起。默認(rèn)將數(shù)組元素用,連接,傳入的參數(shù)即為連接符。 showImg(https://box.worktile.com/view/fcfcdf2c99b14edfb6768085955ae253?pid=4b0845b09ca94218a955f8...
摘要:第五題對(duì)稱二叉樹難度簡單給定一個(gè)二叉樹,檢查它是否是鏡像對(duì)稱的。第十六題最大連續(xù)的個(gè)數(shù)難度簡單給定一個(gè)二進(jìn)制數(shù)組,計(jì)算其中最大連續(xù)的個(gè)數(shù)。第十八題平方數(shù)之和難度簡單給定一個(gè)非負(fù)整數(shù),你要判斷是否存在兩個(gè)整數(shù)和,使得。 寫在前面 最近忙著調(diào)教新裝備,沒有及時(shí)的寫題解,但是沒有在偷懶沒刷題喔~來認(rèn)真整理下最近做的題目~ 之前考慮按tag來刷題,后來收到了推薦的leetcode題解,就根據(jù)上...
摘要:給定一個(gè)代表每個(gè)房屋存放金額的非負(fù)整數(shù)數(shù)組,計(jì)算你在不觸動(dòng)警報(bào)裝置的情況下,今晚能夠偷竊到的最高金額。狀態(tài)表示表示偷竊號(hào)到號(hào)房間所能獲得的最高金額。下標(biāo)均從開始打家劫舍我們已經(jīng)知道了房間單排排列的狀態(tài)轉(zhuǎn)移方程,接下來思考房間環(huán)狀排列的做法。 ...
閱讀 886·2023-04-25 15:13
閱讀 1501·2021-11-22 12:03
閱讀 923·2021-11-19 09:40
閱讀 2099·2021-11-17 09:38
閱讀 1821·2021-11-08 13:18
閱讀 742·2021-09-02 15:15
閱讀 1831·2019-08-30 15:54
閱讀 2826·2019-08-30 11:12