题目
在一组 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]
题解
超时了,但是能用
/**
* @param {number[][]} richer
* @param {number[]} quiet
* @return {number[]}
*/
function getRicher(richer, quiet) {
let richerArr = []
for (let i = 0; i < quiet.length; i++) {
richerArr[i] = []
richerArr[i].push(i)
getRicherArr(richer, richerArr[i], i)
}
console.log(richerArr)
return richerArr
}
function getRicherArr(richer, Arr, i) {
for (let j = 0; j < richer.length; j++) {
if (richer[j][1] === i) {
Arr.push(richer[j][0])
getRicherArr(richer, Arr, richer[j][0])
}
}
}
var loudAndRich = function (richer, quiet) {
let n = quiet.length;
let richerArr = getRicher(richer, quiet)
let answer = []
let min;
for (let i = 0; i < n; i++) {
min = n;
for (let j = 0,len = richerArr[i].length; j < len; j++) {
if (min > quiet[richerArr[i][j]]) {
min = quiet[richerArr[i][j]]
}
}
answer[i] = quiet.indexOf(min);
}
return answer
};