-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0851-loud-and-rich.js
More file actions
55 lines (48 loc) · 1.56 KB
/
0851-loud-and-rich.js
File metadata and controls
55 lines (48 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
* Loud And Rich
* Time Complexity: O(N + M)
* Space Complexity: O(N + M)
*/
var loudAndRich = function (richer, quiet) {
const socialNetworkGraph = new Array(quiet.length).fill().map(() => []);
const calculatedResults = new Array(quiet.length).fill(-1);
for (
let relationshipIndex = 0;
relationshipIndex < richer.length;
relationshipIndex++
) {
const currentRelationship = richer[relationshipIndex];
const financiallySuperior = currentRelationship[0];
const financiallyInferior = currentRelationship[1];
socialNetworkGraph[financiallyInferior].push(financiallySuperior);
}
function findOptimalQuietPerson(currentIndividual) {
if (calculatedResults[currentIndividual] !== -1) {
return calculatedResults[currentIndividual];
}
let leastQuietCandidate = currentIndividual;
const directSuperiors = socialNetworkGraph[currentIndividual];
for (
let superiorIndex = 0;
superiorIndex < directSuperiors.length;
superiorIndex++
) {
const superiorIndividual = directSuperiors[superiorIndex];
const discoveredQuieterOption =
findOptimalQuietPerson(superiorIndividual);
if (quiet[discoveredQuieterOption] < quiet[leastQuietCandidate]) {
leastQuietCandidate = discoveredQuieterOption;
}
}
calculatedResults[currentIndividual] = leastQuietCandidate;
return leastQuietCandidate;
}
for (
let personIterator = 0;
personIterator < quiet.length;
personIterator++
) {
findOptimalQuietPerson(personIterator);
}
return calculatedResults;
};