Thursday, December 6, 2018

851. Loud and Rich

TLE -> I have kept track of result while doing dfs
However if a result[i] has already been updated, we don't need to dfs this node one more time
That's why if result[i] != - 1 then we don't need to dfs one more time

80.41 %
class Solution {
    public int[] loudAndRich(int[][] richer, int[] quiet) {
// A directed acyclic graph -> tree
// Find the quietest id of its subtree
int len = quiet.length;
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < len; i++) {
graph.add(new ArrayList<>());
}
for (int[] pair : richer) {
graph.get(pair[1]).add(pair[0]);
}
int[] result = new int[len];
Arrays.fill(result, -1);
for (int i = 0; i < len; i++) {
if (result[i] == -1) {
dfs(graph, result, i, quiet);
}
}
return result;
}
private void dfs(List<List<Integer>> graph, int[] result, int curr, int[] quiet) {
int minIndex = curr;
for (int next : graph.get(curr)) {
if (result[next] == -1) {
dfs(graph, result, next, quiet);
}
if (quiet[result[next]] < quiet[minIndex]) {
minIndex = result[next];
}
}
result[curr] = minIndex;
}
}

No comments:

Post a Comment