Minimize Malware Spread II LeetCode solution in JavaScript

1
var minMalwareSpread = function (graph, initial) {
2
let n = graph.length;
3
let AdjList = new Map();
4
let listFromGraph = (mat) => {
5
// convert adj matrix to adj list
6
for (let i = 0; i < n; i++) {
7
AdjList[i] = [];
8
for (let j = 0; j < n; j++) {
9
if (mat[i][j] === 1 && i !== j) {
10
AdjList[i].push(j);
11
}
12
}
13
}
14
};
15
listFromGraph(graph);
16
let visitedSet = new Set(); //visited set, to manage the visited nodes & their count as they are unique
17
let dfs = (curr, node) => {
18
// dfs helper, visit the graph assuming that node, given as 2nd parameter is deleted
19
if (curr === node) {
20
return;
21
}
22
if (visitedSet.has(curr)) {
23
return;
24
}
25
visitedSet.add(curr); // size of visited shows how many nodes are visited/affected by the malware
26
let neighbours = AdjList[curr];
27
for (let i in neighbours) {
28
// visit all the neighbours
29
dfs(neighbours[i], node);
30
}
31
};
32
let MinSpread = n; // min index of node with max reduction in malware
33
let SpreadDist = n; // number of nodes affected by malware if MinSpread was deleted
34
for (let i = 0; i < initial.length; i++) {
35
for (let j = 0; j < initial.length; j++) {
36
// find the total nodes affected if ith node is removed
37
dfs(initial[j], initial[i]);
38
}
39
if (SpreadDist == visitedSet.size) {
40
// to get min index but same impact
41
MinSpread = Math.min(initial[i], MinSpread);
42
}
43
if (SpreadDist > visitedSet.size) {
44
// to get max impact
45
MinSpread = initial[i];
46
SpreadDist = visitedSet.size;
47
}
48
visitedSet.clear(); // clear visited set for next index to be deleted
49
}
50
return MinSpread;
51
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0