LeetCode 851 喧鬧和富有(拓撲排序)

2021-10-09 18:41:11 字數 1833 閱讀 1967

在一組 n 個人(編號為0, 1, 2, ..., n-1)中,每個人都有不同數目的錢,以及不同程度的安靜(quietness)。

為了方便起見,我們將編號為 x 的人簡稱為"person x "

如果能夠肯定 person x 比 person y 更有錢的話,我們會說richer[i] = [x, y]

注意 richer 可能只是有效觀察的乙個子集。

另外,如果 person x 的安靜程度為 q ,我們會說quiet[x] = q

現在,返回答案 answer ,其中 answer[x] = y 的前提是,在所有擁有的錢不少於person x 的人中,person y 是最安靜的人(也就是安靜值 quiet[y] 最小的人)。

示例:

輸入:richer =[[

1,0]

,[2,

1],[

3,1]

,[3,

7],[

4,3]

,[5,

3],[

6,3]

], quiet =[3

,2,5

,4,6

,1,7

,0]輸出:[5,

5,2,

5,4,

5,6,

7]解釋:

answer[0]

=5,person 5 比 person 3 有更多的錢,

person 3 比 person 1 有更多的錢,

person 1 比 person 0 有更多的錢。

唯一較為安靜(有較低的安靜值 quiet[x])的人是 person 7,

但是目前還不清楚他是否比 person 0 更有錢。

answer[7]

=7,在所有擁有的錢肯定不少於 person 7 的人中

(這可能包括 person 3,4,5,6 以及 7

),最安靜(有較低安靜值 quiet[x]

)的人是 person 7。

其他的答案也可以用類似的推理來解釋。

1<= quiet.length = n <=

5000

<= quiet[i]

< n,所有 quiet[i] 都不相同。

0<= richer.length <= n *

(n-1)/

20<= richer[i]

[j]< n

richer[i][0

]!= richer[i][1

]richer[i] 都是不同的。

對 richer 的觀察在邏輯上是一致的。

參考:圖graph–拓撲排序(topological sorting)

class

solution

queue<

int> q;

//點的id

vector<

int>

ans(n,-1

);for(

int i =

0; i< n; i++

) ans[i]

= i;

//初始化最安靜的是自己

for(

int i =

0; i < n; i++)}

while

(!q.

empty()

)}return ans;}}

;

192 ms 33.1 mb

我的csdn部落格位址

851 喧鬧和富有

在一組 n 個人 編號為0,1,2,n 1 中,每個人都有不同數目的錢,以及不同程度的安靜 quietness 為了方便起見,我們將編號為x的人簡稱為 personx 如果能夠肯定 personx比 persony更有錢的話,我們會說richer i x,y 注意richer可能只是有效觀察的乙個子...

851 喧鬧和富有

讀完題後,感覺是個有向圖,我的理解是對於乙個點 這裡即所謂person 取所有能走到這個點的點裡對應的quiet最小的點。找能到達點x的點集中最小quiet的這個過程可定義為func x 這樣問題就簡化為了對點x,找與x有直接關聯的 即存在於richer陣列中 的點集ys中的min func y 可...

851 喧鬧和富有

題目描述 在一組 n 個人 編號為 0,1,2,n 1 中,每個人都有不同數目的錢,以及不同程度的安靜 quietness 為了方便起見,我們將編號為 x 的人簡稱為 person x 如果能夠肯定 person x 比 person y 更有錢的話,我們會說 richer i x,y 注意 ric...