日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python周末列表的表示形式合并_Python 列表合并题

發布時間:2023/11/27 生活经验 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python周末列表的表示形式合并_Python 列表合并题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

完成 merge(L1, L2) 函數:輸入參數是兩個從小到大排序好的整數列表 L1 和 L2,

返回合成后的從小到大排序好的大列表 X

例如 merge([1,4,5], [2, 7, 11]) 會返回 [1,2,4,5,7]; merge([], [2,3,4]) 會返回 [2,3,4]

[1, 5, 7, 9], [2,4,6]

要求:

(1) 程序中比較兩個元素大小的次數不能超過 len(L1) + len(L2)

(2) 只能用列表 append() 和 len() 函數

高中舍友給我發的題

很迷,這道題想了好久,寫了好幾種解法,然后發布這篇文章之前又改了一次。現在的方案和代碼量是我能想到的最優解。

難點在于如何在程序比較兩個元素大小的次數不能超過 len(L1) + len(L2) 顯然桶排序(o(2*(m+n))、冒泡排序(o(n^2))、快速排序(o(nlogn))統統不能用。好在給定的兩個數列都已經排序好了,大概能用下貪心算法?

算法

先來個循環,對兩個列表分別計數,每一步都取最小值到新列表,比如取到l1[0] 下一個循環就讓 l1[1]跟 l2[0] 比較,以此類推。如果有一個列表全部元素都已經被比較完了并全部加入新列表中了,就直接讓另一個列表內的剩下的元素加到新列表后面。

經過這波操作之后,最大比較次數為 len(l1)+len(l2) -1,某些情況下比較次數會降到 1/3[ len(l1)+len(l2) ]

下面是實現的代碼

# 時間復雜度 n(n) n < len(1)+len(2)

def merge(l1, l2):

l1_length = len(l1)

l2_length = len(l2)

if l1_length is 0:

return l2

if l2_length is 0:

return l1

x = []

i = 0

j = 0

m = 0

while True:

m += 1

if l1[i] < l2[j]:

x.append(l1[i])

if i < l1_length - 1:

i += 1

else:

for s in l2[j:]:

x.append(s)

break

else:

x.append(l2[j])

if j < l2_length - 1:

j += 1

else:

for l in l1[i:]:

x.append(l)

break

print('兩個列表的長度和 %s 比較次數 %s' % (l1_length + l2_length, m))

return x

文章最后修訂于 2020年9月6日

總結

以上是生活随笔為你收集整理的python周末列表的表示形式合并_Python 列表合并题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。