簡體   English   中英

如何更有效地獲取列表中所有記錄最高數字的索引值?

[英]How do I more efficiently get a list's index values for all its record highest numbers?

說我有第一份清單:

list = [0, 1, 0, 4, 3, 1, 2, 5, 1, 12, 9, 32, 31, 19, 44, 3]

第一個列表中所有數字n的第二個列表,使得n = max(list [:n]),如下所示:

list_max = [0, 1, 4, 5, 12, 32, 44]

假設我想獲取list_max在list中的索引位置的列表,該列表應該等於:

list_max_pos = [0, 1, 3, 7, 9, 11, 14]

我可以做類似的事情:

list_max_pos = []
m = len(list_max)
for n in range (0, m):
    list_max_pos.append(list.index(list_max[n]))

問題是,如果原始列表過長,即數百萬個值長,則效率很低,因為它每次都從頭開始搜索。 為了節省時間,我可以開始搜索每個新值的索引,而最后一個值的索引不存在。 也就是說,在列表中的位置11找到32之后,我可以從位置12開始搜索44,而不是從0開始搜索。

我將如何實施呢?

遍歷列表后,只需遍歷列表即可。 這將以O(n)時間復雜度工作。

inputlist = [0, 1, 0, 4, 3, 1, 2, 5, 1, 12, 9, 32, 31, 19, 44, 3]
maxvalue = -1
answer= []
for index,element in enumerate(inputlist):
    if element > maxvalue:
        maxvalue = element
        answer.append(index)
print(answer)

注意:插入O(1)的列表的攤銷時間復雜度。 插入的漸近最壞情況運行時復雜度為O(n) ,平均情況下的復雜度為O(1) 。您可以使用出隊隊列將其稍微加快速度。 插入到出隊中的漸近和攤銷的最壞情況運行時復雜度為O(1)

您可以在這里閱讀更多有關它的信息-> python數據結構的TimeComplexity

輸出值

[0, 1, 3, 7, 9, 11, 14]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM