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

79 阅读1分钟

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

题号:461
//移位运算
var hammingDistance = function (x, y) {
    let z = x ^ y
    let result = 0
    while (z != 0) {
        let tmp = z
        if (tmp >> 1 << 1 != z) {
            result++
        }
        z = z >> 1
    }
    return result
};
题号:448
//利用map
var findDisappearedNumbers = function (nums) {
    let map = new Map()
    nums.forEach(ele => {
        map.set(ele, 1)
    });
    let result = []
    for (let i = 1; i <= nums.length; i++) {
        if (!map.has(i)) {
            result.push(i)
        }
    }
    return result
};

//利用原数组作为数据载体
//利用原数组作为我们承装信息的载体的前提是:找到一种逻辑使得我们
//在使用原数组的数据的时候还能还原回来原来的数据信息
var findDisappearedNumbers = function (nums) {
    let result = []
    nums.forEach((item, idx, arr) => {
        if (arr[Math.abs(item) - 1] > 0) {
            arr[Math.abs(item) - 1] = arr[Math.abs(item) - 1] * (-1)
        }
    });
    nums.forEach((item, idx) => {
        if (item > 0) {
            result.push(idx + 1)
        }
    });
    return result
};
题号:543
//路径走过的节点数
var diameterOfBinaryTree = function (root) {
    //为什么要这样?
    //不得已而为之,js在最外面设置一个全局变量会导致leetcode一直提交不过
    //其它题也有类似情况,想到这个引用传递下去保存结果的方法
    let result = { result: 1 }
    helper(root, result)
    //节点数量-1为路径
    return result.result - 1
};
function helper(node, result) {
    if (node == null) {
        return 0
    }
    let left = helper(node.left, result)
    let right = helper(node.right, result)
    //每一个节点的左右子树加上自己都有可能最大
    //这里做判断,在遍历的过程中就做了判断
    result.result = Math.max(left + right + 1, result.result)
    return Math.max(left, right) + 1
}