• 207. Course Schedule


    package LeetCode_207
    
    import java.util.*
    import kotlin.collections.ArrayList
    
    /**
     * 207. Course Schedule
     * https://leetcode.com/problems/course-schedule/description/
     *
    There are a total of numCourses courses you have to take, labeled from 0 to numCourses-1.
    Some courses may have prerequisites, for example to take course 0 you have to first take course 1,which is expressed as a pair: [0,1]
    Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
    
    Example 1:
    Input: numCourses = 2, prerequisites = [[1,0]]
    Output: true
    Explanation: There are a total of 2 courses to take.
    
    Example 2:
    Input: numCourses = 2, prerequisites = [[1,0],[0,1]]
    Output: false
    Explanation: There are a total of 2 courses to take.
    To take course 1 you should have finished course 0, and to take course 0 you should
    also have finished course 1. So it is impossible.
     * */
    class Solution {
        /**
         * solution: BFS
         * Time complexity:O(n^2), Space complexity:O(n)
         * */
        fun canFinish(numCourses: Int, prerequisites: Array<IntArray>): Boolean {
            val graph = ArrayList<ArrayList<Int>>()
            //create graph by prerequisites
            for (i in 0 until numCourses) {
                graph.add(ArrayList())
            }
            for (item in prerequisites){
                val start = item[1]
                val end = item[0]
                graph[start].add(end)
            }
    
            //calculate in degree
            val indegrees = IntArray(numCourses)
            for (g in graph){
                for (item in g){
                    indegrees[item]++
                }
            }
    
            val queue = LinkedList<Int>()
            for (i in 0 until numCourses) {
                if (indegrees[i]==0){
                    queue.offer(i)
                }
            }
    
            while (queue.isNotEmpty()){
                val cur = queue.poll()
                for (item in graph[cur]){
                    indegrees[item]--
                    if (indegrees[item]==0){
                        queue.offer(item)
                    }
                }
            }
    
            for (i in 0 until numCourses){
                if (indegrees[i]!=0){
                    //represent graph got a cycle, so return false
                    return false
                }
            }
    
            return true
        }
    }
  • 相关阅读:
    java进程自动杀死
    线程池的取值(一)与拒绝策略
    zju 1383 Binary Numbers
    可以连续几行数,,,分别相加求和
    几个数字的和
    zju 2812 Quicksum---------hdu 2734
    rwkj 1332 C语言实验四(函数):题目1、数字根
    zju 1295 Reverse Text
    zju 1241 Geometry Made Simple
    hdu 1379 DNA Sorting
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13216263.html
Copyright © 2020-2023  润新知