Python返回列表中的top5,時間複雜度O(1)
Python返回列表中的top5,時間複雜度O(1)
有同學可能想了,我用sort排序一下,再返回不就好了。
那有沒有別的解決辦法呢?
# 題目:長度10W的列表,返回top5的數。
# 要求:時間複雜度O(1)
#
# 解題思路:
# 用列表模擬棧,遍歷列表;
# 定義一個長度為5的棧,取出前5個數字壓棧
# 從第6個元素開始,用下一個數字和棧內最小的元素比較,如果大於,刪除最小的元素,執行壓棧;
# 返回列表,即為top5
def func1(list_raw):
max_stack = list_raw[:5]
for i in list_raw[5: ]:
if i > min(max_stack):
max_stack.remove(min(max_stack))
max_stack.append(i)
return max_stack
import numpy as np
list1 = list(np.random.randint(1000, size=1000))
print(func1(list1))
相關推薦
Python返回列表中的top5,時間複雜度O(1)
Python返回列表中的top5,時間複雜度O(1) 有同學可能想了,我用sort排序一下,再返回不就好了。 那有沒有別的解決辦法呢? # 題目:長度10W的列表,返回top5的數。 # 要求:時間複雜度O(1) # # 解題思路: # 用列表模擬棧,遍歷列表; # 定義一個長度為5
陣列去重(時間複雜度nlgn,時間複雜度o(1))
public static void quickSort(int[] numArr, int left, int right) { //如果left等於right,即陣列只有一個元素,直接返回 if (left >= right) { return;
Morris遍歷詳解——二叉樹先序中序後序遍歷( 時間複雜度O(N),空間複雜度O(1) )
Morris二叉樹遍歷: 來到當前的節點:Cur 如果Cur無左孩子,Cur向右移動 (Cur = Cur.right) 如果Cur有左孩子,找到Cur左子樹上最右的節點,記為 mostright
陣列中只出現一次的數字,時間複雜度O(n),空間複雜度O(1)的解法
題目:一個整型數組裡除了兩個陣列外,其他的數字都出現了兩次,要找出這兩個數字。 異或運算有一個性質:任何數異或它自己,結果都是0;這樣如果題目變成只有一個數字只出現一次,其他數字均出現兩次,這樣我們從頭到尾異或陣列中的每一個數字,那麼最終的結果就是隻出現一次的數字
面試中關於HashMap的時間複雜度O(1)的思考
今天在面試的時候說到HashMap,面試官問了這麼一個問題:你說HashMap的get迭代了一個連結串列,那怎麼保證HashMap的時間複雜度O(1)?連結串列的查詢的時間複雜度又是多少? 在這之前我是閱讀過HashMap的原始碼的:Java7原始碼淺析——對HashMap的理解
2019秋招筆試題——(數組合並)n個有序集合的並集,時間複雜度O(n^2)
這是一道下午剛剛筆試的題目,百詞斬的秋招演算法工程師題目中的一個。 題目: n個有序集合的合併,我最低的時間複雜度只能降到O(n^2),水平不夠,不能再優化了。 先說說我的思想: 輸入要求已經說明了,我必須要先儲存這n個集合,包括集合的長度以及元素,顯然是一個二維陣列,第一維
3個數字相加等於0,時間複雜度O(n2)
3位數字相加等於0 題目 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which give
演算法題:對只含有0,1,2三個元素的陣列排序,時間複雜度O(n)
題目: 將元素均為0、1、2的陣列排序,時間複雜度O(n)。 思路: 方法1:通過三個下標遍歷一遍實現的方法。 p1從左側開始,指向第一個非1的數字;p3從右側開始,指向第一個非3的數字。 p2從p1開始遍歷,如果是2,p2繼續遍歷,直到p2遇到1或者3 如果遇到
動態規劃演算法(連續子陣列最大和,O(N)時間複雜度O(1)空間複雜度) 【更新於:2018-05-13】
這個題目最早在13年阿里筆試出現,直到前兩天面試另一家電商又出現,哎,欠的都是要還的。 這個問題的思路如下:一維陣列的下標連續的元素構成連續子陣列,求所有連續子陣列中和最大的那個子陣列。 解析:2018-11-08 1 首先這個問題要轉化為Q(n)的問題,對於Q(n)的
Manacher演算法,最長迴文串,時間複雜度O(n)
最長迴文子串 問題 對於一個字串,請設計一個高效演算法,計算其中最長迴文子串的長度。 給定字串A以及它的長度n,請返回最長迴文子串的長度。 測試樣例: “abc1234321ab”,12 返回:7 中心擴充套件到Manache
連結串列排序,時間複雜度O(nlogn)
題目描述對連結串列進行排序,要求時間複雜度O(nlogn)解題思路因題目要求複雜第O(nlogn),故可以考慮歸併排序(1)將待排序陣列(連結串列)取中點並一分為二;(2)遞迴地對左半部分進行歸併排序(3)遞迴地對右半部分進行歸併排序(4)將兩部分進行合併(merge),得到
單鏈表的刪除演算法時間複雜度O(1)和O(n)
平時我們在計算單鏈表的第i個節點刪除時間複雜度時一般認為是O(n),過程如下 1.先從頭節點開始遍歷連結串列,找到第i-1個節點 2.將第i-1節點next指向第i個節點的next 可以看到時間主要花在了遍歷連結串列上 如果我們已經拿到了要刪除的第i個節點Node(i),
就地歸併排序inplacMergeSort,空間複雜度O(1)
難度在就地歸併:說看程式碼及註釋。與上篇文章有點類似。 //============================================================================ //@lgh原創 //==================
java實現時間複雜度O(1)的LFU快取
LFU快取一般需要排序來解決命中率問題(上一篇的LFU實現也是利用了Collections.sort),導致時間複雜度較高。下面採用一種演算法讓LFU的時間複雜度成為O(1)。 資料設計: 1,一個雙向連結串列來儲存命中數(下面程式碼的NodeCount<K>
棧表中獲取最小值,時間複雜度為O(1)
近期複習資料結構,看到網上有一道演算法題,該題目曾經是google的一道面試題,國內的網際網路公司也紛紛效仿。我也順便複習之。 題目內容為:對現在的stack(棧)資料結構進行改進,加一個
編寫程式,在一非遞減的順序表L中,刪除所有值相等的多餘元素。要求時間複雜度O(n),空間複雜度為O(1)
翠花上程式碼: Status delExcrescentValue(SeqList &S){ int flag = 0,val = S.elem[0];//記錄值不等的下標 //printf("%d\n",S.elem[0]); for(int i = 1;i
python 返回列表中的偶數
def is_even_num(l): enum = [] for n in l: if n % 2 == 0: enum.append(n) return enum print(is_even_nu
實現一個棧,要求實現出棧、入棧、返回最小值的時間複雜度為O(1)
由棧的一些基本操作,很容易使出棧和入棧的時間複雜度為O(1),但是由於入棧資料元素順序不一定是有序的,故不能直接實現返回最小值的時間複雜度為O(1)。下面提供兩種方法: (一)設定一個特殊的資料結構型別,包括兩個棧_data棧和_mindata棧,_data棧和原來的棧
輸入一個數組和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字 時間複雜度O(NlogN)
/* *[email protected] 轉載請註明出處 *題目:輸入一個數組和一個數字,在陣列中查詢兩個數, *使得它們的和正好是輸入的那個數字。 *如果有多對數字的和等於輸入的數字,輸出任意一對即可。 *例如輸入陣列1、2、4、7、11、15和數字15。由於
計數排序,傳說中時間複雜度O(n+k)的排序演算法
基本思想 假設數序列中小於元素a的個數為n,則直接把a放到第n+1個位置上。當存在幾個相同的元素時要做適當的調整,因為不能把所有的元素放到同一個位置上。計數排序假設輸入的元素都是0到k之間的整數。 回到頂部 參考程式碼 #include &