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

本文完,感谢阅读 🌹

相关推荐
放下华子我只抽RuiKe5几秒前
FastAPI 全栈后端(七):测试与自动化
运维·前端·人工智能·react.js·前端框架·自动化·fastapi
无限码力几秒前
华为非AI方向笔试真题 - 容器镜像平均大小统计
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为非ai笔试真题·华为0612非ai笔试真题
晓13133 分钟前
【Cocos Creator 3.x】篇——第五章 项目实战优化技术
前端·javascript·游戏引擎
无限码力4 分钟前
华为非AI方向0612笔试真题-循环异或加密器(详细思路+多语言题解)
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为0612笔试真题
凌波粒6 分钟前
LeetCode--1584. 连接所有点的最小费用(最小生成树/Prim算法/Kruskal算法)
算法·leetcode·职场和发展
simidagogogo7 分钟前
生产环境推荐系统最隐蔽的坑:Training-Serving Skew 详解与实战
算法·spark·推荐算法
有梦想的程序星空8 分钟前
【环境配置】使用 Vue CLI 构建 Vue 项目脚手架完整指南
前端·javascript·vue.js
之歆12 分钟前
Ajax 进阶:跨域、CORS、JSONP 与请求封装实战
前端·javascript·ajax
杨先生哦19 分钟前
【2026 热端攻防系列 2/12】DOM 型 XSS 深度实战:AI 多态变形免杀 + 全维度防御
前端·人工智能·笔记·安全·web安全·xss
sugar__salt19 分钟前
前端Ajax核心原理与实战:从异步机制到接口请求全解析
前端·javascript·ajax