需要排序的最短子数组长度
生活随笔
收集整理的這篇文章主要介紹了
需要排序的最短子数组长度
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:給定一個無序數組,求出需要排序的最短子數組長度
例如:arr = [1,5,3,4,2,6,7] 返回4,因為只有[5,3,4,2]需要排序
解決這個問題可以做到時間復雜度為O(N),額外空間復雜度為O(1)
初始化變量noMinIndex = -1,從右向左遍歷,遍歷的過程中記錄右側出現過的數的最小值,標記為min_。假設當前數為arr[i],如果arr[i] > min,說明如果要整體有序,min_值必須會移動到arr[i]的左邊。用noMinIndex記錄最左邊出現這種情況的位置。如果遍歷完成后,noMinIndex依然等于-1,說明從右到左始終不升序,原數組本來就有序,直接返回0,即完全不需要排序。
接下來從左向右遍歷,遍歷的過程中記錄左側出現過的數的最大值,標記為max_。假設當前數為arr[i],如果arr[i] < max, 說明如果排序,max值必然會移動到arr[i]的右邊。用變量noMaxIndex 記錄最右邊出現這種情況的位置
遍歷完成后,arr[noMinIndex,noMaxindex]是真正需要排序的部分,返回長度即可
def getMinLength(L):if L == None or len(L) <2:returnmin_ = L[len(L)-1]noMinIndex = -1for i in range(len(L)-2,0,-1):if L[i] > min_:noMinIndex = ielse:min_ = min(L[i],min_)if noMinIndex == -1:return 0max_ = L[0]noMaxIndex = -1for i in range(1,len(L)):if L[i] > max_:max_ = max(L[i],max_)else:noMaxIndex = ireturn noMaxIndex - noMinIndex + 1?
總結
以上是生活随笔為你收集整理的需要排序的最短子数组长度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数组的partition调整
- 下一篇: 自然数数组的排序