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

115 阅读1分钟

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

题号:252
var canAttendMeetings = function (intervals) {
     
    //按起始时间进行升序排序
    intervals.sort((a, b) => {
        return a[0] - b[0]
    })

    let idx = 1
    while (idx < intervals.length) {
        //判断是否有交集
        if (intervals[idx][0] < intervals[idx - 1][1]) {
            return false
        }
        idx ++
    }
    return true
};
题号:56
//数组先按starti排序
//然后遍历数组
//比较当前元素的start和上一个元素的end
//start > end 压入一个结果进行下一个
//start <= end 有交集记录此时的交集left
//开始遍历找不相交的right 然后压入结果继续
var merge = function (intervals) {
    if (intervals.length < 2) {
        return intervals
    }
    intervals.sort((a,b) => {
        return a[0] - b[0]
    })
    let result = [], idx = 1,preEle = intervals[0]

    while (idx < intervals.length) {
        if (intervals[idx][0] > preEle[1]) {
            result.push(preEle)
            preEle = intervals[idx]
        } else {
            preEle = [preEle[0],Math.max(intervals[idx][1], preEle[1])]
        }
        idx ++
    }
    result.push(preEle)
    return result
};
题号:190
//每次左移动一位然后再右移动一位比较此时是否相等
//相等说明左移出去的那位为0要么为1
var reverseBits = function (n) {

    let result = 0
    for (let i = 0; i < 32; i++) {

        let val = n << 1 >>> 1 == n ?0:1
        if (val == 1) {
            result += Math.pow(2,i)
        } 
        n <<= 1
        if (n == 0) {
            //剪枝一下
            break
        }
     }
    return result
};