30 天刷题挑战(十四)

题目来源: LeetCode 75 30 天 JavaScript 挑战

2722. 根据 ID 合并两个数组

思路

新建一个数组保存结果,依次遍历 arr1arr2 遇到相同的索引,值合并,最后过滤出真值。

代码

js 复制代码
/**
 * @param {Array} arr1
 * @param {Array} arr2
 * @return {Array}
 */
var join = function(arr1, arr2) {
  const res = []

  for (let item of arr1) {
    res[item.id] = item
  }

  for (let item of arr2) {
    if (res[item.id]) {
      Object.assign(res[item.id], item)
    } else {
      res[item.id] = item
    }
  }

  return res.filter(i => !!i);
};

2625. 扁平化嵌套数组

思路

遍历数组,判断每一项是否是数组,是的话使用 flat 函数递归此项,传入 n - 1,否则直接添加到结果数组。

代码

js 复制代码
/**
 * @param {Array} arr
 * @param {number} depth
 * @return {Array}
 */
var flat = function (arr, n) {
  const res = []
  
  for(let item of arr) {
    if (Array.isArray(item) && n > 0) {
      const ret = flat(item, n - 1)
      res.push(...ret)
    } else {
      res.push(item)
    }
  }

  return res
};

1372. 二叉树中的最长交错路径

思路

深度优先遍历,遍历时每个节点存储达此节点的路径数,结果取最大值。

代码

js 复制代码
var longestZigZag = function(root) {
  let res = 0

  const dfs = (node, l, r) => {
    res = Math.max(res, l, r)

    if (node.left) {
      dfs(node.left, r + 1, 0)
    }

     if (node.right) {
      dfs(node.right, 0, l + 1)
    }
  }

  dfs(root, 0, 0)
  
  return res
};

236. 二叉树的最近公共祖先

思路

递归遍历二叉树,遇到节点 pq 时返回。从底到顶回溯,当节点 p, q 在 root 两侧时,向上返回 root

代码

js 复制代码
var lowestCommonAncestor = function(root, p, q) {
  if (root === null || root === p || root === q) {
    return root
  }
  let left = lowestCommonAncestor(root.left, p, q)
  let right = lowestCommonAncestor(root.right, p, q)
  if (left === null) return right
  if (right === null) return left

  return root
};

199. 二叉树的右视图

思路

深度优先遍历,每次先遍历右节点,当结果层数 res.length 等于深度 depth 时,🧵1结果数组添加节点值。

代码

js 复制代码
var rightSideView = function(root) {
  const res = []
 
  const dfs = (node, depth) => {
    if (node === null) {
      return
    }

    if (depth === res.length) {
      res.push(node.val)
    }

    depth++
    dfs(node.right, depth)
    dfs(node.left, depth)
  }

  dfs(root, 0)

  return res
};

本文完,感谢阅读 🌹

相关推荐
python_tty36 分钟前
排序算法(一):冒泡排序
数据结构·算法·排序算法
皮蛋sol周1 小时前
嵌入式学习C语言(八)二维数组及排序算法
c语言·学习·算法·排序算法
LuckyLay1 小时前
使用 Docker 搭建 Rust Web 应用开发环境——AI教你学Docker
前端·docker·rust
pobu1682 小时前
aksk前端签名实现
java·前端·javascript
森焱森2 小时前
单片机中 main() 函数无 while 循环的后果及应对策略
c语言·单片机·算法·架构·无人机
烛阴2 小时前
带参数的Python装饰器原来这么简单,5分钟彻底掌握!
前端·python
0wioiw02 小时前
Flutter基础(前端教程⑤-组件重叠)
开发语言·前端·javascript
平和男人杨争争2 小时前
机器学习12——支持向量机中
算法·机器学习·支持向量机
冰天糖葫芦2 小时前
VUE实现数字翻牌效果
前端·javascript·vue.js
南岸月明2 小时前
我与技术无缘,只想副业搞钱
前端