笔试要用这个平台,所以提前来熟悉一下,刷惯了LeetCode的贴心服务,这个平台手动处理输入确实很烦,而且没有代码补全。。。
首先是处理输入,思路是把NM和后面的数据都存到数组里,然后后面利用数组操作解题。
根据题意,我们应该找到和1相同的所有人,求出数量
很显然第三位为0的数据对我们毫无用处,只需要找第三位为1的数据即可
我的思路是,选择第三位为1的数据,然后判断是否含1,然后利用set将与1有关的所有数add进set中。最后求set.size,若数据中无1,则输出0。
最后避免因顺序漏掉的数,加一层for循环(偷懒,增加了时间复杂度)
代码↓↓
let N,M;
let arr = [];
let data = [];
// 处理输入
while((N=readInt())!=null&&(M=readInt())!=null){
arr.push(N);
arr.push(M);
for(let i=0;i<M;i++){
let a= readInt();
let b = readInt();
let c = readInt();
data.push([a,b,c]);
}
let same = new Set();
let isHas =false;
for(let j=0;j<M;j++){ //增加一层循环,防止遗漏数据
for(let i =0;i<data.length;i++){
if(data[i][2]===1){
if(data[i][0]===1){
isHas = true; //标记位判断如果没有1则输出0
same.add(data[i][1]);
}else{
if(same.has(data[i][0])||same.has(data[i][1])){
same.add(data[i][0]);
same.add(data[i][1]);
}
}
}
}
}
if(!isHas){
print(0);
}else{
print(same.size);
}
}