38 在乙個有序列表裡按照原排序插入乙個值

2021-09-25 07:49:48 字數 792 閱讀 9019

在乙個有序列表裡按照原排序插入乙個值 是一道常見面試題。

這道題一般的解法是判斷出有序列表的排列規則後,基於位置進行遍歷,在找到符合條件的位置進行插入。用到的api有sorted、insert。這個是不考慮演算法的解法,假如l的數值特別多,而恰巧要插入的值又比較靠後,那麼就會比較耗時。

然後我就想能不能利用二分法進行插入,**行數增加了,但是耗時會大大的減少。**如下:

def insert_num(l,n):  #此**只寫了正序,倒序的只要反過來寫就可以,或者進行反轉即可復用此**,最後return再次反轉的列表

if sorted(l)==l:

if l[0]>=n: #如果列表第乙個值大於或等於n,則直接插入到第一位

l.insert(0,n)

elif l[len(l)-1]<=n: #如果n大於或等於列表第乙個值,則直接插入到最後一位

l.insert(len(l)-1,n)

else: #否則

min=0

max=len(l) #此處取len(l)或者len(l)-1均可,mid取值時做對應的調整即可

while true:

mid=int((min+max)//2)

#print(mid)

if l[mid]<=n and l[mid+1]>=n:

l.insert(mid+1,n)

break

if l[mid]>n:

max=mid

if l[mid]min=mid

return l

將排序序列的集合合併成乙個排序序列

您有乙個排序序列的集合,並且想要遍歷所有合併在一起的排序序列。先看如下示例,了解實際需求 import heapq a 1,4,7,10 b 2,5,6,11 for c in heapq.merge a,b print c 124 56710 11值得注意的是,heapq.merge要求所有的輸入...

拓撲排序並且輸出乙個可能的序列

如題描述 根據給出的圖輸出乙個可能的拓撲序列。判斷能否進行拓撲排序的關鍵是圖是否存在環。這裡我們用陣列c的值表示頂點當前的狀態。0代表沒有被訪問過,1代表正在被訪問,1代表該點及其子孫均被訪問過,並且是不存在的環的點。那麼我們用dfs去遍歷,如果該點在被訪問的過程中再次被訪問,則證明存在環。或者該點...

將乙個物件集合按照物件的某個字段排序

comparator是個介面,可重寫compare 及equals 這兩個方法,用於比價功能 如果是null的話,就是使用元素的預設順序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g這樣,當然數字也是這樣的。compare a,b 方法 根據第乙個引數小於 等於或大於第二個引數分別返...