在乙個有序列表裡按照原排序插入乙個值 是一道常見面試題。
這道題一般的解法是判斷出有序列表的排列規則後,基於位置進行遍歷,在找到符合條件的位置進行插入。用到的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 方法 根據第乙個引數小於 等於或大於第二個引數分別返...