Weekly Contest
限制 :
1 <= k <= n <= 50
注意題目,第 輪的下一個人是當前位置的下 個人,模擬整個過程即可。
程式碼:
限制 :
n == derived.length
1 <= n <= 105
derived
are either 0's or 1's根據上述條件得知若要使original存在的必要條件是:
所以只要計算該條件即可得知答案。
程式碼:
限制 :
m == grid.length
n == grid[i].length
2 <= m, n <= 1000
4 <= m * n <= 105
1 <= grid[i][j] <= 106
用dp解,每一個cell可以往右上、右、右下走,所以只要得到右上、右、右下三個cell的答案取max就可以得到當前cell最多可以走多遠,dp式子如下:
但題目還需要額外判定下一個cell的值要大於當前cell的值,把這個條件加入dp判斷式即可。
最終查詢第一個column裡的最大值即是答案。
程式碼:
限制 :
1 <= n <= 50
0 <= edges.length <= n * (n - 1) / 2
edges[i].length == 2
0 <= ai, bi <= n - 1
ai != bi
對於每個connected component,計算是否每個node都連到這個component的其他node,如果符合就是complete connected component。
確認每個connected component即可算出答案。
程式碼:
參考這篇,主要優化的地方是簡化check function的邏輯。
對於一個節點數為 的connected component,如果其擁有 條edge,那他就是一個complete connected component。
所以只要計算目前的connected component有幾個node以及有幾條edge,根據上述定理判斷是否是complete connected component即可。
m = edges.length
程式碼:
參考這篇。
判斷是否是complete connected component的方法與上一個解答一樣。
與上個解答不同的是,使用disjoint set來快速計算每個connected component的node與edge的數量。
disjoint set的完整說明可以參考這一篇
m = edges.length
程式碼: