前往
大廳
主題

LeetCode - 2497. Maximum Star Sum of a Graph 解題心得

Not In My Back Yard | 2023-11-02 12:00:18 | 巴幣 0 | 人氣 84

題目連結:


題目意譯:
現在有一個由 n 個編號為 0 到 n - 1 的節點所組成之無向圖。你被給定一個索引值從 0 開始且長度為 n 的整數陣列 vals,其中 vals[i] 代表著第 i 個節點的數值。

你同時也被給定一個二維整數陣列 edges,其中 edges[i] = [ai, bi] 代表著節點 ai 和節點 bi 之間有一條無向邊連接彼此。

一個星形圖(Star Graph)為給定的圖中的一個子圖,其有著一個中心節點並有著 0 或多個鄰居。換句話說,其代表著一個 edges 的子集合使得在該集合的邊中存在著一個共同的節點作為端點。

下圖依序顯示了有著 3 和 4 個鄰居且以藍色節點作為中心的星形圖。

星形總和(Star Sum)為在一個星形圖之中的所有節點之數值總和。

給定一整數 k,回傳最多包含著 k 條邊的那些星形圖之中星形總和之最大值。

限制:
n == vals.length
1 ≦ n ≦ 10 ^ 5
-10 ^ 4 ≦ vals[i] ≦ 10 ^ 4
0 ≦ edges.length ≦ min(n × (n - 1) / 2, 10 ^ 5)
edges[i].length == 2
0 ≦ ai, bi ≦ n - 1
ai != bi
0 ≦ k ≦ n - 1



範例測資:
範例 1:
輸入: vals = [1,2,3,4,10,-10,-20], edges = [[0,1],[1,2],[1,3],[3,4],[3,5],[3,6]], k = 2
輸出: 16
解釋: 上圖代表著輸入的圖。
有著最大星形總和的星形圖以藍色標記。其以 3 作為中心並包含著 1 和 4 作為鄰居。
可以證明無法得到一個總和大過 16 的星形圖。

範例 2:
輸入: vals = [-5], edges = [], k = 0
輸出: -5
解釋: 只有一個可能的星形圖存在,其即為節點 0 本身。
因此我們回傳 -5。


解題思維:
可以先建立鄰接表(Adjacency List,參見這題)或類似的東西來記錄每一個節點的鄰居。

接著窮舉每一個節點作為星形圖的中心,接著選擇它的鄰居中數值前 k 大且非負(不夠選則盡量選),便可以得到以該節點作為中心可以得到的最大星形總和(記得不要忘記加上中心節點本身的數值)。

最後取每一個節點能得到的最大星形總和中的最大值即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作