leetcode 2020春季算法比賽

這次比賽有點ACM的味道。

零、背景

2020年4月18日參加了 leetcode 舉辦的 2020年春季算法比賽。

結果比賽期間有人來看房子。

原因是我在深圳合租的房子有個室友抽籤抽到公租房,搬出去了。
幾個同事預約這天下午來看房,只能抽一段時間做幾道題了。

比如在三點半的時候,有個同事過來了。

五點左右,又有個同事來看房。

這看房大概浪費了一個小時半,我這敲代碼速度,題肯定做不完了。

不過我還是儘量的去做題,做了四道題,看排名是第 88 名,沒進去前 50 名,比較遺憾。

PS:剛開始比賽時我隨機看的第四題,一看大水題,敲完發現提交leetcode的反饋完全看不懂,又點了幾下提交,被罰幾次。

後來只能從第一題開始做,做到後面再重寫第四題被卡時間了, map換成unorder_map 就過了。

下面來看看這些題吧。

一、拿硬幣

題意:有 n 堆硬幣,每次可以從一堆中拿1個或者2個。
問最少需要拿幾次?

思路:每堆獨立。

對於每一堆,肯定是儘量拿兩個,如果到最後還剩一個就只能拿一個。

使用數學語言就是偶數除2,奇數除2向上取整。
合在一起就是每堆除2向上取整,然後求和。

 

二、傳遞信息

題意:給一個有向圖,起點在 0, 每次可以選擇一條邊進行移動。
問移動 k 次後到達節點 n - 1 的路徑數。

思路:動態規劃題,我喜歡的題型。

暴力方法:
每移動一步,統計所有頂點爲當前終點的路徑數。
複雜度:O(k n)

矩陣冪方法:
構造狀態矩陣策略:如果一個點 i 到另一個點 j 有邊,則置 matrix[i][j] = 1。
起始狀態是 [1, 0, 0, 0, 0]
複雜度:O(n^2 log(k))

由於這裏 k 比較小,所以沒必要矩陣冪來做,直接暴力做就行了。

 

三、劇情觸發時間

題意:給一些三個屬性值,每天三個屬性值都會增長,增長多少輸入參數會告訴你。
如果三個屬性值都大於某個劇情的最小依賴屬性值,則這個劇情可以解鎖。
問:哪些劇情可以解鎖,如果可以解鎖,劇情輸出在第幾天解鎖的,都在輸出-1。

思路:有兩個思路來做這道題。

一種是每天計算當前屬性值,然後查詢可以解鎖哪些劇情。
假設有 n 天,m 個劇情,沒法搜索,只能暴力。
複雜度:O(n m),會超時。

另一種是提前計算好每天的屬性值,然後拿着每個劇情來二分查找可以在哪天首次解鎖。
複雜度:O(m log(n))

 

四、最小跳躍次數

題意:給一個大小爲 n 的數組 arr 。
如果我們在某個位置 i 時,可以向左跳到任意位置,向右可以調到 i+arr[i] 位置。
問最少需要多少步跳的位置可以大於n。

思路:大水題,之前做過無數次了
一個隊列搞定。

使用隊列記錄需要跳的位置,使用一個map標記某個位置是否跳過以及跳數。
死循環遍歷隊列,判斷是否可以跳出去,可以了結束。
不可以了則把左邊未跳的位置加入隊裏,右邊的i+arr[i]加入隊列即可。
複雜度:O(n)

 

五、二叉樹任務調度

題意:給一個二叉樹,節點的值爲當前節點需要執行的CPU時間。
給兩個CPU,同一個節點同一時間只能由一個CPU執行。
不同節點可以併發執行。

限制:一個節點的左右兒子都執行完的時候,才能執行當前節點。

這道題不好想,我們分兩步來看這道題。

假設我們已經有最優解了,CPU也分配好了。
此時翻轉一下依賴,換成左右兒子必須等待父節點執行完。
依賴翻轉後,發現最優解不變。

所以第一步是翻轉依賴,把父親依賴兒子轉換成兒子依賴父親。
這樣我們就可以從上到下遞歸了。

接着,遞歸就需要對一棵樹求兩個值了。
一個值是可以併發運行的總時間,一個是隻能獨立運行的總時間。

假設左右兒子都求完這兩個時間,那當前樹的時間能不能求出來呢?
還真可以。

我們需要判斷左右兒子並行後,能否還存在獨立運行時間。
只有一種情況會存在,那就是一個兒子的獨立時間大於另一個兒子的所有時間。
否則,我們可以先把左右的獨立時間併發運行,然後其他的時間全部正常併發。

一個樹的獨立時間和併發時間計算出來之後,答案就是獨立時間加上併發時間的一半。

 

六、最後

賽後看看這次比賽,體驗挺差的。

首先入口不好找,也不能看榜單,也不能看自己哪些題過了哪些題沒過,提交結果也看不懂(後來看懂了)。

不過題目是好題目,矩陣冪相關的動態規劃,二分查找、廣搜最優質等。
而對於最後一題,不會就算了,這種確實不好想。

《完》

-EOF-

題圖:來自朋友圈。

上篇文章:兩個故事,關於投資理財

推薦:leetcode 第184算法比賽

長按二維碼,一起成長學習

 

▲ 長按關注,天天成長

覺得有幫助可以點擊好看與轉發,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章