演算法高階3 2

2021-08-10 16:54:26 字數 2198 閱讀 7405

題目一:

設計可以變更的快取結構。

【題目】

設計一種快取結構,該結構在構造時確定大小,假設大小為k,並有兩個功能:

(1)set(key, value):將記錄(key, value)插入該結構。

(2)get(key):返回key對應的value值。

【要求】

(1)set和get方法的時間複雜度為o(1)。

(2)某個key的set和get操作一旦發生,認為這個key的記錄成了最經常使用的。

(3)當快取的大小超過k時,移出最不經常使用的記錄,即set或get最久遠的。

【舉例】

假設快取結構的例項是cache,大小為3,並依次發生如下行為:

1.cache.set("a", 1)。最經常使用的記錄為("a", 1)。

2.cache.set("b", 2)。最經常使用的記錄為("b", 2),("a", 1)變為最不經常的。

3.cache.set("c", 3)。最經常使用的記錄為("c", 3),("a", 1)還是最不經常的。

4.cache.get("a")。最經常使用的記錄為("a", 1),("b", 2)變為最不經常的。

5.cache.set("d", 4)。大小超過了3,所以移除此時最不經常使用的記錄("b", 2),加入記錄("d", 4),並且為最經常使用的記錄,然後("c", 3)變為最不經常使用的記錄。

**:(暫無,map+佇列)

題目二:

給定乙個n行3列二維陣列,每一行表示有一座大樓,一共有n座大樓。所有大樓的底部都坐落在x軸上,每一行的三個值(a,b,c)代表每座大樓的從(a,0)點開始,到(b,0)點結束,高度為c。

輸入的資料可以保證a**:(暫無)

題目三:

找到被指的新型別字元

【題目】

新型別字元的定義如下:

1.新型別字元是長度為1或者2的字串。

2.表現形式可以僅是小寫字母,例如,"e";也可以是大寫字母+小寫字母,例如,"ab";還可以是大寫字母+大寫字母,例如,"dc"。現在給定乙個字串str,str一定是若干新型別字元正確組合的結果。比如"eaccbi",由新型別字元"e"、"a"、"cc"和"bi"拼成。再給定乙個整數k,代表str中的位置。請返回被k位置指中的新型別字元。

【舉例】

str="aaabcdecbcg"。

1.k=7時,返回"ec"。

2.k=4時,返回"cd"。

3.k=10時,返回"g"。

**:題目四:

字典樹(字首樹)的實現

【題目】

字典樹又稱為字首樹或trie樹,是處理字串常見的資料結構。假設組成所有單詞的字元僅是「a」~「z」,請實現字典樹結構,幷包含以下四個主要功能。

void insert(string word):新增word,可重複新增。

void delete(string word):刪除word,如果word新增過多次,僅刪除乙個。

boolean search(string word):查詢word是否在字典樹中。

int prefixnumber(string pre):返回以字串pre為字首的單詞數量。

**:題目五:

給定乙個整數陣列arr,請返回子陣列的最大異或值

要求:時間複雜度o(n)

**:題目六&七:

數字的英文表達和中文表達

【題目】

給定乙個32位整數num,寫兩個函式分別返回num的英文與中文表達字串。

【舉例】

num=319

英文表達字串為:three hundred nineteen

中文表達字串為:三百一十九

num=1014

英文表達字串為:one thousand, fourteen

中文表達字串為:一千零十四

num=-2147483648

英文表達字串為:negative, two billion, one hundred forty seven million, four

hundred eighty three thousand, six hundred forty eight

中文表達字串為:負二十一億四千七百四十八萬三千六百四十八

num=0

英文表達字串為:zero

中文表達字串為:零

**:題目八:

乙個陣列如何能夠拆出異或值為0的最多的子陣列。

**:

《演算法競賽高階指南》0x32約數

求解 1,n 之間的最大的反素數,有性質 這個反素數是質因數個數最多的數中最小的乙個。證明 假設有乙個數質因數個數比它多,如果在他前面,不滿足反素數的定義,如果在他後面,一定可以找到第乙個質因數比它大的數,這個數作為結果更好,反證可知,這個數質因數一定是最多的 反證 假設有質因數與他的個數一樣但是比...

演算法 高階演算法

三數之和 3sum 第十一章 33 給出乙個有 n 個整數的陣列 s,在 s 中找到三個整數 a,b,c,找到所有使得 a b c 0 的三元組。注意事項 在三元組 a,b,c 要求 a b c,結果不能包含重複的三元組。樣例 如 s 你需要返回的三元組集合的是 1,0,1 1,1,2 an hig...

高階32 三艘船

32 三艘船 問題描述 明明由於工作的關係,經常需要坐船到某地出差辦事。久而久之,明明就對這兩地之間船的班次情況相當了解,他會根據辦事的具體情況選擇不同班次的船出行。這兩地的船一共分為三個班次 特快船 快船 慢船,三個班次的船在同一天的0點從港口出發,並沿著同一路線勻速航行,只是它們到達目的地的時刻...