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
};

本文完,感谢阅读 🌹

相关推荐
天天向上10242 分钟前
vue3 抽取el-dialog子组件
前端·javascript·vue.js
大大dxy大大5 分钟前
机器学习-KNN算法示例
人工智能·算法·机器学习
lecepin6 分钟前
AI Coding 资讯 2025-11-05
前端·javascript
excel9 分钟前
Vue 模板解析器 parserOptions 深度解析
前端
前端小咸鱼一条14 分钟前
17.React获取DOM的方式
前端·javascript·react.js
excel16 分钟前
Vue 编译核心中的运行时辅助函数注册机制详解
前端
excel16 分钟前
🌿 深度解析 Vue DOM 编译器模块源码:compile 与 parse 的构建逻辑
前端
excel18 分钟前
深度解析 Vue 编译器中的 transformShow:v-show 指令的编译原理
前端
excel18 分钟前
深度解析:decodeHtmlBrowser —— 浏览器端 HTML 解码函数设计
前端
excel19 分钟前
深度解析:Vue 模板编译器中的 transformVText 实现原理
前端