刷题记录|目标101题--图

写在前面

开个贴记录一下 刷题的过程,目前参照 leetcode101,目标101题,由于太久没写java了,也会涉及到一些java的基础用法,希望能和大家共勉吧~

已刷链接:

数据结构介绍

二分图

No.1  Graph Bipartite?

题目链接:https://leetcode.com/problems/is-graph-bipartite/

解题思路:

利用队列和广度优先搜索,我们可以对未染色的节点进行染色,并且检查是否有颜色相同的 相邻节点存在。注意在代码中,我们用 0 表示未检查的节点,用 1 2 表示两种不同的颜色。

class Solution {
    public boolean isBipartite(int[][] graph) {
        int len = graph.length;
        int[] color = new int[len];
        Queue<Integer> que = new LinkedList<Integer>();
        for (int i = 0; i < len; i++) {
            if (color[i] == 0) {
                color[i] = 1;
                que.offer(i);
            }
            while(que.size() != 0) {
                int cur = que.poll();
                for (int j = 0; j < graph[cur].length; j++) {
                    int neighbor = graph[cur][j];
                    if (color[neighbor] == 0) {
                        color[neighbor] = color[cur] == 1 ? 2 : 1;
                        que.offer(neighbor);
                    } else if (color[neighbor] == color[cur]) {
                        return false;
                    }
                }
            }
        }
        return true;
    }
}

拓扑排序

No.1 Course Schedule II

题目链接:https://leetcode.com/problems/course-schedule-ii/

解题思路:

用 map 建立一个有向图,找到入度为 0 的点放入queue中进行遍历,每遍历一个点把他指向的点的入度-1,

class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        Map<Integer, List<Integer>> graph = new HashMap<Integer, List<Integer>>();
        int[] indegree = new int[numCourses];
        int[] res = new int[numCourses];
        for (int[] prerequisite : prerequisites) {
            int src = prerequisite[1];
            int end = prerequisite[0];
            indegree[end]++;
            List<Integer> list = graph.getOrDefault(src,new ArrayList<Integer>());
            list.add(end);
            graph.put(src,list);
        }
        Queue<Integer> que = new LinkedList<Integer>();
        for (int i = 0; i < numCourses; i++) {
            if (indegree[i] == 0) {
                que.add(i);
            }
        }
        int i = 0;
        while(que.size() != 0) {
            int cur = que.poll();
            res[i++] = cur;
            if (graph.containsKey(cur)) {
                List<Integer> list = graph.get(cur);
                for(int temp : list) {
                    indegree[temp]--;
                    if (indegree[temp] == 0) {
                        que.offer(temp);
                    }
                }
            }
        }
        if (i == numCourses) {
            return res;
        }
        return new int[0];
    }
}

#逃离互联网##刷题#
全部评论

相关推荐

03-01 21:45
中北大学 Python
孤蓝长空:请你说一下为什么你用websocket而不是http,请你说一下什么是rpc,为什么用rpc,你的rpc的传输协议是JSON,xml还是什么 请你描述一下你的鉴权流程(完整的) 我问的是第二个项目,随便问的哈哈哈
开工第一帖
点赞 评论 收藏
分享
02-25 14:28
烟台大学 Java
程序员小白条:大众化,没区分度,另外就是简历的排版,中英文格式,以及表达问题,简历不能过于白话文.....投的太少了,多投吧,现在才2月底,3,4月会多起来的,具体可以看我以前的帖子有一些修改指南之类的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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