演算法高階3 4

2021-08-11 07:42:40 字數 2352 閱讀 9968

題目一:

換錢的方法數

【題目】 給定陣列arr,arr中所有的值都為正數且不重複。每個值代表 一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定一 個整數aim代表要找的錢數,求換錢有多少種方法。

【舉例】 arr=[5,10,25,1],aim=0。 組成0元的方法有1種,就是所有面值的貨幣都不用。所以返回1。 arr=[5,10,25,1],aim=15。 組成15元的方法有6種,分別為3張5元、1張10元+1張5元、1張 10元+5張1元、10張1元+1張5元、2張5元+5張1元和15張1元。所 以返回6。 arr=[3,5],aim=2。 任何方法都無法組成2元。所以返回0。

題目二:

排成一條線的紙牌博弈問題

【題目】 給定乙個整型陣列arr,代表數值不同的紙牌排成一條線。玩家a和玩家b依次拿 走每張紙牌,規定玩家a先拿,玩家b後拿,但是每個玩家每次只能拿走最左或最 右的紙牌,玩家a和玩家b都絕頂聰明。請返回最後獲勝者的分數。

【舉例】 arr=[1,2,100,4]。 開始時玩家a只能拿走1或4。如果玩家a拿走1,則排列變為[2,100,4],接下來玩 家b可以拿走2或4,然後繼續輪到玩家a。如果開始時玩家a拿走4,則排列變為 [1,2,100],接下來玩家b可以拿走1或100,然後繼續輪到玩家a。玩家a作為絕頂 聰明的人不會先拿4,因為拿4之後,玩家b將拿走100。所以玩家a會先拿1,讓排 列變為[2,100,4],接下來玩家b不管怎麼選,100都會被玩家a拿走。玩家a會獲 勝,分數為101。所以返回101。 arr=[1,100,2]。 開始時玩家a不管拿1還是2,玩家b作為絕頂聰明的人,都會把100拿走。玩家b會 獲勝,分數為100。所以返回100。

題目三:

kmp演算法擴充套件題目二 字串匹配問題

【題目】 給定字串str,其中絕對不含有字元'.'和'*'。再給定字串exp, 其中可以含有'.'或'*','*'字元不能是exp的首字元,並且任意兩個 '*'字元不相鄰。exp中的'.'代表任何乙個字元,exp中的'*'表示'*' 的前乙個字元可以有0個或者多個。請寫乙個函式,判斷str是否能被 exp匹配。

【舉例】 str="abc",exp="abc",返回true。 str="abc",exp="a.c",exp中單個'.'可以代表任意字元,所以返回 true。 str="abcd",exp=".*"。exp中'*'的前乙個字元是'.',所以可表示任 意數量的'.'字元,當exp是"...."時與"abcd"匹配,返回true。 str="",exp="..*"。exp中'*'的前乙個字元是'.',可表示任意數量 的'.'字元,但是".*"之前還有乙個'.'字元,該字元不受'*'的影響, 所以str起碼有乙個字元才能被exp匹配。所以返回false。

題目四 :

未排序正數陣列中累加和為給定值的最長子陣列長度

【題目】 給定乙個陣列arr,該陣列無序,但每個值均為正數,再給定一 個正數k。求arr的所有子陣列中所有元素相加和為k的最長子數 組長度。 例如,arr=[1,2,1,1,1],k=3。 累加和為3的最長子陣列為[1,1,1],所以結果返回3。

題目五:

未排序陣列中累加和小於或等於給定值的最長子陣列長度

【題目】 給定乙個無序陣列arr,其中元素可正、可負、可0,給定乙個整數k。求 arr所有的子陣列中累加和小於或等於k的最長子陣列長度。 例如:arr=[3,-2,-4,0,6],k=-2,相加和小於或等於-2的最長子陣列為 ,所以結果返回4。

題目六 :

【題目】給定乙個陣列,表示乙個直方圖,每個bar寬度都是1,且彼此緊貼在一起。例如,表示 第乙個bar高度為3, 第二個bar高度為1, 第三個bar高度為2, 第四個bar高度為4,畫出圖,想想這是乙個容器。如果裝水,可以裝3個單位的水。3的bar上沒水 1的bar上有2格水 2的bar上有1格水 4的bar上沒水

【要求】輸入乙個陣列,輸出可以裝多少水。

題目七:

表示式得到期望結果的組成種數

【題目】 給定乙個只由0(假)、1(真)、&(邏輯與)、|(邏輯或)和^(異或)五種字元組 成的字串express,再給定乙個布林值desired。返回express能有多少種組 合方式,可以達到desired的結果。

【舉例】 express="1^0|0|1",desired=false。 只有1^((0|0)|1)和1^(0|(0|1))的組合可以得到false,返回2。 express="1",desired=false。 無組合則可以得到false,返回0。

筆記:1、動態規劃是一種優化技巧,來自於你對問題子過程本身的理解。

2、用於無後效性問題,可以用記憶化搜尋來做(傻快取)。

3、經典動態規劃要背好。

4、沒見過的動態規劃,先寫暴力遞迴,再做記憶化搜尋。

5、推乙個普遍位置需要哪些子狀態。壓縮空間用滾動陣列。

隨筆:博弈論。快速冪。嘗試函式。滑動視窗。單調性。預處理陣列。sg。

演算法 高階演算法

三數之和 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...

3 4 HotSpot演算法實現

o opmap 在hotspot 的實現中,是使用一組稱為 oopmap 的資料結構來達到這個目的的,在類載入完成的時候,hotspot 就把物件內什麼偏移量上是什麼型別的資料計算出來,在 jit編譯過程中,也會在特定的位置記錄下棧和暫存器中哪些位置是引用。這樣,gc在掃瞄時就可以直接得知這些資訊了...

《演算法基礎》 3 4 有序鍊錶

有時,讓鍊錶中的項保持有序是十分方便的。當將乙個新項加入有序鍊錶時,需要搜尋鍊錶來找到該項所屬位置,並更新相應的鏈結來插入該項。下面的偽 顯示了在乙個有序鍊錶中插入乙個項的演算法 在最壞的情況下,該演算法可能需要遍歷整個鍊錶為新項找到正確的位置。因此,如果該鍊錶儲存n個單元格,其執行時間為o n 雖...