知識點:計數;排序;
因為資料量較小,可以直接暴力統計經過每個扇區的次數。然後選取此時最大的扇區即可。
(資料量較大時,可用線段樹等區間查詢技術來優化~)
class
solution
; cnt[rounds[0]
]++;// 因為只有round[0] 的起點需要計數,所以單獨統計一下。
知識點:貪心;排序因為每輪選擇中,bob 總是選擇最少的一堆。所以 bob 得到最少的 n 堆是對其他兩個人最有利的局面。
剩下的 2n 堆該如何分配呢?
每次選擇最大的兩堆,alice 獲得其中較大的,我獲得其中較小的。
雖然這樣選擇,alice 還是能獲得剩餘的裡面最大的一堆,但是可以讓剩餘堆中的最大值最小。
知識點:思維題;瞎搞;每操作一次,新增的 1 可能會有如下三種情況:
我們現在維護乙個字典 m,m 的 key 表示段的長度,value 表示在字串中,長度為 key 的段的數量。初始時,m 中無記錄。接下來,讓我們看下上述三種情況分別對 m 造成了哪些變化。
然後記錄一下最後一次使 m[m] 不為零的操作即可。
另外,還有乙個重要問題,如何確定被刪除段的長度呢?
設有乙個陣列 link,當 arr[i] 為某個段的端點時,link[i] 才有意義,其值代表另乙個端點的位置。
接下來,上述三種情況如何更新 link。
另外,實現時根本不需要m,因為我們只關心長度為 m 的段的數量~。
知識點:遞迴;記憶化;字首和設 f(l,r) 為在 stonevalue[l:r] 這一排石子上可獲得最大分數;
顯然,f(1,n) 即為答案。那麼 f(1,n) 咋求呢?遞迴呀~
另外,因為求解過程中,會產生重複的子問題,所以需要通過記憶化的方法避免重複計算。
class
solution
if(l == r)
else
else
if(s1 > s2)
else
}//回歸階段,更新答案
LeetCode 第 203 場周賽
1560.圓形賽道上經過次數最多的扇區 class solution else 起點大於終點的情況 1561.查詢大小為 m 的最新分組 1563.石子遊戲 v 記憶搜尋 dfs dp 1 n 就是答案 終止條件 l r,return 0 狀態轉移 遍歷 l,r 中的中間點節點,根據劃分sum i ...
Leetcode C 《第203場周賽》
1.1問題 給你乙個整數 n 和乙個整數陣列 rounds 有一條圓形賽道由 n 個扇區組成,扇區編號從 1 到 n 現將在這條賽道上舉辦一場馬拉松比賽,該馬拉松全程由 m 個階段組成。其中,第 i 個階段將會從扇區 rounds i 1 開始,到扇區 rounds i 結束。舉例來說,第 1 階段...
leetcode 第132場周賽
愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...