能否跳完N个格子

题目:

地上共有N个格子,你需要跳完地上所以的格子,但是格子间是有强依赖关系的,跳完前一个格子后,后续的格子才会被开启,给质检的依赖关系由多组steps数组给出,steps[0]表示前一个格子,steps[1]表示steps[0]可以开启的格子:比如[0,1]表示从跳完第0个格子以后第一个格子就开启了,再比如[2,1],[2,3]表示跳完第2个格子后第1个格子和第3个格子就被开启了。请计算能够否由给出的steps数组跳完所有的格子,如果可以输出yes,否则输出no。

说明:1,你可以从一个格子跳到任意一个开启的格子;2,没有前置依赖条件的格子默认就是开启的;3,如果总数是N,则所有格子编号为[0,N-1]连续数组。输入为一个数组N表示总共有多少格子,接着输入多组二维数组steps表示所有格子之间的依赖关系;输出为,如果能按照steps给出的依赖关系跳完所有格子,输出yes,否则输出no。

示例1:

输入:

3

[0,1]

[0,2]

输出:

yes

示例2:

输入:

2

[1,0]

[0,1]

输出:

no

示例3:

输入:

6

[0,1]

[0,2]

[0,3]

[0,4]

[0,5]

输出:

yes

 public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        scan.nextLine();
        List<List<Integer>> grip = new LinkedList<>();

        while (true) {
            String line = scan.nextLine();
            List<Integer> relation = new LinkedList<>();
            // 如果当前行为空
            if (line.isEmpty()) {
                break;   //遇空行,停止输入
            } else {
                // 非空行,添加到输入列表
                String[] temp = line.split(" ");
                relation.add(Integer.parseInt(temp[0]));
                relation.add(Integer.parseInt(temp[1]));
                grip.add(relation);
            }
        }
        
        
        String result = gripJump(grip,n);
        System.out.println(result);
    }

    private static String gripJump(List<List<Integer>> grip, int n) {
        Map<Integer,List<Integer>> map = new HashMap<>();
        for(int i=0;i< n;i++){
            map.put(i,new LinkedList<>());
        }
        for(List<Integer> relation : grip){
            map.get(relation.get(0)).add(relation.get(1));
        }
        Queue<Integer> initGrip = new LinkedList<>();
        for(int i =0;i< n;i++){
            initGrip.add(i);
        }
        for(List<Integer> relation : grip){
            initGrip.remove(relation.get(1));
        }
        List<Integer> countGripJump = new LinkedList<>();
        while(!initGrip.isEmpty()){
            int current = initGrip.poll();
            countGripJump.add(current);
            initGrip.addAll(map.get(current));


        }
        return countGripJump.size()== n?"yes":"no";
    }

#笔试##技术岗笔试题求解#
全部评论

相关推荐

2025-12-29 22:46
武汉大学 Java
点赞 评论 收藏
分享
2025-12-27 22:36
门头沟学院 Java
点赞 评论 收藏
分享
2025-12-10 19:36
湖北工业大学 Web前端
饿魔:看到在线简历了吧
点赞 评论 收藏
分享
2025-11-02 23:41
已编辑
绿云科技_pms系统售后工程师
我是一个普通人,双非普本,两年前开始卷Java,在校做过一些很普通的项目,有过一段外包公司Java实习、it技术支持实习,最后Java卷不动,毕业就在四线老家的某互联网分公司,干着酒店pms维保工程师,拿着5.5k底薪,待遇五险+12%公积金+双休+法定节假日,早9晚5点半,不加班,基本上到点就走,工作强度一般,周末也有闲暇时间各种Java凉了的消息满天飞,但相比其他岗位而言,Java岗位还是挺多的,只不过应聘者个个都有实力,也卷的要命,所以,学Java首先得承认自己是那块料,然后付出成倍的努力才能卷的赢,我深知自己不是这块料,付出努力也没有太好的效果,于是果断放弃Java,说到底,Java本身没问题,只是我有问题罢了但学Java对我而言,真的一点用都没有吗?不是的,相反,正是从学Java到自己做项目,积累了第一段实习经验后跳槽,再继续做项目、优化简历,拿到第二段技术支持的实习,毕业后才有了这份工作,Java对我而言,不是最终目的,而是一个跳板,能让我在非Java程序员的岗位竞争中有一点点优势所以,我仍悲观的认为,包括我在内,大部分普通人是不适合学Java的,从外部原因来说,Java入行的门槛已经不再像几年前那样低了,在当今社会越来越卷的趋势下,想要入行所需知识和技能将是非常多的,即使拼了命的学Java,可能都追不上大佬的步伐我也曾经有过面试中小公司倒在二面三面的经历,也曾亲自在招聘网站上看到某Java岗位,在两三天内收到上百份简历的记录,不由得感叹:能最终拿到offer的,或是是天资聪颖,或是凭着顽强意志玩了命的卷(隔壁宿舍有人作息颠倒卷前端最终拿了大厂offer),而作为绝大部分的普通人,最终可能成为陪跑者对于我而言,我深知我所处的条件,学Java并没有太多优势,也并非真正热爱编程,更重要的是,从我两次的实习经历来看,我很讨厌加班,想下班后能有真正属于自己的时间,我可以利用这些时间享受生活,或花时间卷我想卷的,而不是被工作推着走,于是,我在大四上学期,便放弃对Java的执念我并不反对Java卷成这样,毕竟这是属于时代的问题范围了,而且适者生存,总有人能在激烈的环境中脱引而出,但作为绝大多数普通人中的一员,思考Java是否真的适合自己去学,自己是否真的能适应真实的工作强度,显得尤为重要,我们应更多的去探寻自身优势和感兴趣的领域,并为之发光发热,把我们比作螺丝钉,理想状态下,应该让每一个螺丝钉都能选择自己适合的位置,而不是一个位置让成百上千个螺丝钉挤在一起
哈哈哈,你是老六:大部分人肯定是普通人,哪有这么多有钱人,有钱人也是普通人一步一步赚出来的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务