日常刷题0x19之未出新手村

187 阅读2分钟

如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的

题号:207
//拓扑排序
var canFinish = function (numCourses, prerequisites) {
    //记录numCourses这写课程每一阶段的前置可能(学习完了前置课程之后依赖它的课程的条件就减少一个,减少为0即可开始学习)
    let array = new Array(numCourses).fill(0)
    let queue = []//可供现阶段直接选择学习的课程,不依赖任何课程的课程
    let map = new Map()//记录课程的依赖前置课程,某门课的前置必须课程
    prerequisites.forEach((arr, idx) => {
        let first = arr[0]
        let second = arr[1]
        if (map.has(second)) {
            let courses = map.get(second)
            courses.push(first)
            map.set(second, courses)
        } else {
            let courses = [first]
            map.set(second, courses)
        }

        array[first]++
    });

    array.forEach((item, idx) => {
        if (item == 0) {
            queue.push(idx)
        }
    });
    if (map.size == 0) {
        return true
    }
    if (queue.length == 0) {
        return false
    }

    let learnCount = 0
    while (queue.length != 0) {
        learnCount++
        let course = queue.shift()//学习这门课
        let courses = map.get(course)
        if (courses) {
            for (let i = 0; i < courses.length; i++) {
                let course = courses[i]
                array[course]--
                if (array[course] == 0) {
                    queue.push(course)
                }
            }
        }
    }
    if (learnCount === numCourses) {
        return true
    }
    return false
};
题号:189
//一次一个多次原地移动
var rotate = function (nums, k) {

    let count = k % nums.length, begin = 0
    while (count != 0) {
        let last = nums[nums.length - 1]
        let end = nums.length - 2
        while (end >= 0) {
            nums[end + 1] = nums[end]
            end--
        }
        nums[0] = last
        count--
    }
};
题号:73
//笨思路,两次扫描
//第一次:扫描哪些要被设置为0,其中我用字母X代表这个地方的横竖也要置为0,用字母O表示接下来要置为0
//第二次:根据字母O的状态置换为0
var setZeroes = function (matrix) {
    for (let i = 0; i < matrix.length; i++) {
        for (let j = 0; j < matrix[0].length; j++) {
            if (matrix[i][j] == 0 || matrix[i][j] === 'X') {
                //行
                for (let k = 0; k < matrix[0].length; k++) {
                    if (matrix[i][k] == 0 || matrix[i][k] === 'X') {
                        matrix[i][k] = 'X'
                    } else {
                        matrix[i][k] = 'O'
                    }
                }
                //列
                for (let k = 0; k < matrix.length; k++) {
                    if (matrix[k][j] == 0 || matrix[k][j] === 'X') {
                        matrix[k][j] = 'X'
                    } else {
                        matrix[k][j] = 'O'
                    }
                }
                matrix[i][j] = 'O'
            }
        }
    }

    for (let i = 0; i < matrix.length; i++) {
        for (let j = 0; j < matrix[0].length; j++) {
            if (matrix[i][j] === 'O') {
                matrix[i][j] = 0
            }
        }
    }
};