赛码—动脑子认老乡 JS实现

在这里插入图片描述

笔试要用这个平台,所以提前来熟悉一下,刷惯了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);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值