题解 | #牛群的喂养顺序II#

牛群的喂养顺序II

https://www.nowcoder.com/practice/05abc133293a42358bbbb4016034728e

知识点:拓扑排序

思路:和上一题一样,上一题其实我已经写出来了输出队列,这时返回即可

编程语言:java

如果我的思路启发了你,给个小小关注吧~

我是废江,一个从java跑到内核再准备润回java的打工人,我会持续分享从linux内核到上层java微服务等干货

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param numCows int整型
     * @param feedOrders int整型二维数组
     * @return int整型一维数组
     */
    List<Integer> topLogicalSort(int[][] graph, int[] inDegree, int n) {
        List<Integer> ans = new ArrayList<>();//保存结果
        Queue<Integer> queue = new ArrayDeque<>();

        //将所有度为0的入队列
        for (int i = 0; i < inDegree.length; i++) {
            if (inDegree[i] == 0)
                queue.add(i);
        }

        while (!queue.isEmpty()) {
            //取队列中的元素
            int data = queue.poll();
            //存入结果之中
            ans.add(data);
            //判断这个元素的边,如果有都入队
            for (int i = 0; i < n; i++) {
                if (graph[data][i] == 1) {
                    //该节点因为被入队了,入度-1
                    inDegree[i] --;
                    //这里需要将入度=0的节点入队列,和bfs中的标记数组一个道理
                    if (inDegree[i] == 0)
                        queue.add(i);
                }
            }
        }
        return ans;
    }
    public int[] findFeedOrderII (int numCows, int[][] feedOrders) {
        // write code here
        //建图,统计入度
        int[][] graph = new int[numCows][numCows];
        int[] inDegree = new int[numCows];
        for (int i = 0; i < feedOrders.length; i++) {
            int a = feedOrders[i][0];
            int b = feedOrders[i][1];
            graph[a][b] = 1;//a到b有边
            inDegree[b] ++;//b的入度+1
        }

        List<Integer> arr = topLogicalSort(graph, inDegree, numCows);
        //判断输出的数组,长度不为numCows,那就是图中有环了,输出不了一个完整的拓扑顺序
        if (arr.size() == numCows) {
            int[] str = new int[numCows];
            int i = 0;
            for (int j = arr.size() - 1; j >= 0; j--)
                str[i++] = arr.get(j);
            return str;
        }
        return new int[0];
    }
}

全部评论

相关推荐

||&nbsp;先说下主播个人情况:211本,暑期实习之前有过一段中大厂的后端实习,暑期拿过腾讯的实习offer,综合考虑业务和语言最终去了美团。实习期间体感还是不错的,5月初去的,去了就一直急着要需求做,担心因为没有产出导致转正失败,在第二个星期就和mt透露我希望能够留用。虽然第一个由于美团新人landing的友好性基本没做什么需求,但是后面也写出了小2w行的代码量(不包含单测)。中期经常主动加班赶需求,经常持续一两个星期加班到10点甚至更后面。mt对我确实不错,也是言传身教,实习期间给我讲了很多关于单测,ddd,set化等的理解,也是受益匪浅,此外在做需求的时候,也能看出把比较有含金量的部分交给我做...
菜菜菜小白菜菜菜:我在字节实习了四个月,有转正的压力所以周末大部分也在公司自学,也是因为一些原因转正拖的很久,这个点还没答辩,过段时间才回去答辩。整个不确定性的焦虑贯穿了我的秋招三个月,我也曾经犹豫过是不是应该放弃转正走秋招更快,最后因为沉没成本一直舍不得放弃,前前后后七个月真的挺累的,尤其是没有来字节实习的同学已经校招拿到意向时更加焦虑。这段时间也跟mentor聊了很多次,他告诉我未来工作上或者生活上,比这些更头疼的事情会更多,关键还是要调整好自己的心态。转正没有通过从过程上来看其实跟你自身没太大的关系,拖了三个月不出结果显然是ld的问题,并且今年美团最近的开奖大家似乎都不是很乐观,所以不去也罢。我在字节实习的时候,6月份有一个赶上春招末期的25届同事刚面进来,也拿到了小sp的薪水。不要对这件事有太大的压力,时代的问题罢了
点赞 评论 收藏
分享
10-01 09:50
门头沟学院 Java
肖先生~:这个人真的很好,点赞
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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