牛客 劍指offer系列題解 把陣列排成最小的數

2021-10-06 02:34:20 字數 1256 閱讀 8991

記錄刷題的過程。牛客和力扣中都有相關題目,這裡以牛客的題目描述為主。該系列預設採用python語言。

1、問題描述:

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。

2、資料結構:

陣列,字串,排序

3、題解:

快速排序,排序規則:

x + y > y + x ==> x > y

x + y < y + x ==> x < y

比如:x,y分別為3,30,因為330>303,所以x>y

# -*- coding:utf-8 -*-

class

solution

:def

printminnumber

(self, numbers)

:# write code here

deffast_sort

(l,r)

:if l >= r:

return

i,j = l,r

while i < j:

while strs[j]

+ strs[l]

>= strs[l]

+ strs[j]

and i < j:

j -=

1while strs[i]

+ strs[l]

<= strs[l]

+ strs[i]

and i < j:

i +=

1 strs[i]

,strs[j]

= strs[j]

,strs[i]

strs[i]

,strs[l]

= strs[l]

,strs[i]

fast_sort(l,i -1)

fast_sort(i +

1,r)

strs =

[str

(num)

for num in numbers]

fast_sort(0,

len(strs)-1

)return

''.join(strs)

4、複雜度分析:

時間複雜度:o(nlogn)

空間複雜度:o(n)

牛客劍指offer 1 10題解

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution else continue 記憶體集體向右移兩個位元組 並置 0前兩個位元組 v...

牛客 劍指offer系列題解 最小的K個數

記錄刷題的過程。牛客和力扣中都有相關題目,這裡以牛客的題目描述為主。該系列預設採用python語言。1 問題描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2 資料結構 二叉樹,堆 3 題解 方法1 排序,取前k個數 co...

牛客 劍指offer 醜數(Java)

牛客上對應題目 解析 方法一 逐個判斷每個整數是不是醜數的解法,直觀但不夠高效 所謂乙個數m是另乙個數n的因子,是指n能被m整除,也就是說n m 0.根據醜數的定義,醜數只能被2,3,5整除。也就是說如果乙個數能被2整除,我們把它連續除以2 如果能被3整除,就連續除以3 如果能被5整除,就除以5.如...