LeeCode-刷题日记-Day32
997. 找到小镇的法官
思路:出度与入度。
/**
* @param {number} n
* @param {number[][]} trust
* @return {number}
*/
var findJudge = function(n, trust) {
const inDegrees=new Array(n+1).fill(0)
const outDegrees=new Array(n+1).fill(0)
for(let num of trust){
let x=num[0],y=num[1];
++inDegrees[y];
++outDegrees[x];
}
for(let i=1;i<n+1;++i){
if(outDegrees[i]===0&&inDegrees[i]===n-1){
return i;
}
}
return -1;
};
1557. 可以到达所有点的最少点数目
思路:一个节点无法到达,那么意味着他的入度为0。即关注节点的入度,寻找入度为0的节点加入结果集中。
/**
* @param {number} n
* @param {number[][]} edges
* @return {number[]}
*/
var findSmallestSetOfVertices = function(n, edges) {
let flag = new Array(n).fill(0);
for(let [from,to] of edges){
flag[to]=1;
}
let res=[]
for(let i=0;i<n;i++){
if(flag[i]===0){
res.push(i);
}
}
return res;
};
841. 钥匙和房间
思路:创建一个队列。每次将访问到的房间内所有节点加入队列。再将此房间至为false防止重复访问。从队列中拿出所有节点,访问到房间再加入队列。每次访问一个房间即房间数加1。最终判断是否进入所有房间即可。
/**
* @param {number[][]} rooms
* @return {boolean}
*/
var canVisitAllRooms = function(rooms) {
let pass = rooms[0],index=1;
rooms[0]=false;
while(pass.length>0){
let arr = pass.splice(0,pass.length);
for(let item of arr){
if(rooms[item]!==false){
pass.push(...rooms[item].splice(0,rooms[item].length))
index++;
rooms[item]=false;
}
}
}
return index===rooms.length;
};
- 本文链接:https://archer-lan.github.io/2023/11/20/LeeCode-%E5%88%B7%E9%A2%98%E6%97%A5%E8%AE%B0-Day32/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。