【JavaScript】LeetCode:56-60

文章目录

  • 56 路径总和Ⅲ
  • 57 二叉树的最近公共祖先
  • 58 二叉树中的最大路径
  • 59 岛屿数量
  • 60 腐烂的橘子

56 路径总和Ⅲ

在这里插入图片描述

  • 递归
  • 遍历每个节点所有可能的路径。pathSum():返回所有节点满足条件的路径数目,traversal():返回当前遍历节点满足条件的路径数目。
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/var traversal = function(root, targetSum){if(root == null){return 0;}let res = 0;if(root.val == targetSum){res += 1;//return res; 不能立刻返回,下面可能还有结果(一正一负)}res += traversal(root.left, targetSum - root.val);res += traversal(root.right, targetSum - root.val);return res;
}/*** @param {TreeNode} root* @param {number} targetSum* @return {number}*/
var pathSum = function(root, targetSum) {if(root == null){return 0;}let ans = 0;ans += traversal(root, targetSum);ans += pathSum(root.left, targetSum);ans += pathSum(root.right, targetSum);return ans;
};

57 二叉树的最近公共祖先

在这里插入图片描述

  • 递归 + 后序遍历(自底向上查找)
  • 情况1:如果找到一个节点,左子树出现节点p,右子树出现节点q,或右子树出现节点p,左子树出现节点q,那么该节点为节点p和q的最近公共祖先。
  • 情况2:节点p或q本身就是最近公共祖先。
  • 如果遇到节点p或q就返回本身节点;如果一直没有遇到节点p或q,直到叶子节点,则返回null。
  • 遍历左右子树,用left和right承接返回结果。
  • 如果left和right都不为空,说明此时root就是最近公共节点。
  • 如果left为空,right / left不为空,就返回right / left,说明目标节点是通过right / left返回的。
/*** Definition for a binary tree node.* function TreeNode(val) {*     this.val = val;*     this.left = this.right = null;* }*/
/*** @param {TreeNode} root* @param {TreeNode} p* @param {TreeNode} q* @return {TreeNode}*/
var lowestCommonAncestor = function(root, p, q) {var traversal = function(root, p, q){if(root == null){return null;}if(root == p || root == q){return root;}let left = traversal(root.left, p, q);let right = traversal(root.right, p, q);if(left != null && right != null){return root;}else if(left == null && right != null){return right;}else if(left != null && right == null){return left;}else{return null;}}return traversal(root, p, q);
};

58 二叉树中的最大路径

在这里插入图片描述

  • 递归 + 后序遍历
  • 以节点root为根的最大路径和sum = root.val + 左子树的返回值 + 右子树的返回值
  • 每个节点root的返回结果 = root.val + max(左子树的返回值,右子树的返回值)
  • 不断更新结果maxSum = max(maxSum,sum)
  • 最后结果返回max(maxSum,0),例如:如果右子树是负数,那路径就不需要走右子树了,因为路径和会越加越小。
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number}*/
var maxPathSum = function(root) {var traversal = function(root){if(root == null){return  0;}let left = traversal(root.left);let right = traversal(root.right);let sum = root.val + left + right;maxsum = Math.max(maxsum, sum);res = root.val + Math.max(left, right);return Math.max(res, 0);}let maxsum = -Number.MAX_VALUE;traversal(root);return maxsum;
};

59 岛屿数量

在这里插入图片描述

  • DFS
  • 主函数:numIslands,双层for循环遍历网格点,如果该网格点为岛屿且没有被访问过,调用递归函数。
  • 递归函数:dfs,网格点遍历上、右、下、左资格方向,若该方向上的点越界或已经被访问,continue;否则判断该方向上的点是否为岛屿,若为岛屿则继续递归。
/*** @param {character[][]} grid* @return {number}*/
var numIslands = function(grid) {var dfs = function(grid, vis, x, y){let dirt = [[1, 0], [0, 1], [-1, 0], [0, -1]];for(let i = 0; i < 4; i++){let x_ = x + dirt[i][0];let y_ = y + dirt[i][1];if(x_ < 0 || x_ >= n || y_ < 0 || y_ >= m || vis[x_][y_] == 1){continue;}if(grid[x_][y_] == '1'){vis[x_][y_] = 1;dfs(grid, vis, x_, y_);}}}let n = grid.length;let m = grid[0].length;let vis = Array(n).fill(null).map(() => Array(m).fill(0));let res = 0;for(let i = 0; i < n; i++){for(let j = 0; j < m; j++){if(!vis[i][j] && grid[i][j] == '1'){dfs(grid, vis, i, j);res += 1;}}}return res;
};

60 腐烂的橘子

在这里插入图片描述

  • BFS
  • 双层for循环遍历单元格,记录新鲜橘子的个数fresh,并将腐烂的橘子记录到队列queue中。
  • 逐层遍历队列中的元素,每遍历一层分钟数 + 1,直到队列为空。
  • 遍历腐烂橘子的四个方向:上、右、下、左,若该方向上的橘子是新鲜的,则新鲜橘子个数 - 1,变为腐烂橘子。
  • 若最后所有橘子都变成了腐烂的,则返回分钟数,否则说明还存在新鲜橘子,该橘子永远都不能变为腐烂橘子,返回 -1。
  • 最后返回的分钟数应该 - 1,因为刚开始处理队列中第一个元素时,就已经 + 1了,因此结果也多加了1。
/*** @param {number[][]} grid* @return {number}*/
var orangesRotting = function(grid) {let n = grid.length;let m = grid[0].length;let dirt = [[1, 0], [0, 1], [-1, 0], [0, -1]];let queue = [];let fresh = 0;let res = 0;for(let i = 0; i < n; i++){for(let j = 0; j < m; j++){if(grid[i][j] == 1){fresh += 1;}else if(grid[i][j] == 2){queue.push([i, j]);}}}if(fresh == 0){return 0;}while(queue.length){res += 1;let temp = queue;queue = [];for(let [x, y] of temp){for(let d = 0; d < 4; d++){let x_ = x + dirt[d][0];let y_ = y + dirt[d][1];if(x_ >= 0 && x_ < n && y_ >= 0 && y_ < m && grid[x_][y_] == 1){queue.push([x_, y_]);grid[x_][y_] = 2;fresh -= 1;}}}}return fresh? -1: res - 1;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547225.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CloudMusic:免费听歌

本文所涉及所有资源均在 传知代码平台可获取。 目录 概述 演示效果 视频演示 图片展示 核心逻辑 获取歌曲图片 提取搜索结果 使用方式 部署方式 Docker部署1 构建镜像 Web站点部署2 附件下载 概述 CloudMusic是一款全网歌曲免费听的web项目&#xff0c;无需任何数据库&#x…

19、网络安全合规复盘

数据来源&#xff1a;5.网络安全合规复盘_哔哩哔哩_bilibili

【Java】异常处理 —— Throwable 及其应用

通过一张图来展示Throwable类的继承体系&#xff0c;如图2所示。 图2 Throwable异常体系结构图 ● Error类称为错误类&#xff0c;它表示Java运行时产生的系统内部错误或资源耗尽的错误&#xff0c;是比较严重的&#xff0c;仅靠修改程序本身是不能恢复执行的&#xff0c;例如…

3D建模软件 | Blender v4.2.2 绿色版

Blender是一款功能强大的免费开源3D创作套件&#xff0c;适用于创建3D可视化效果&#xff0c;如静态图像、3D动画、视觉特效以及视频编辑。Blender以其跨平台兼容性、高效内存管理、统一的工作流程和活跃的社区支持而受到独立艺术家和小型工作室的青睐。 它提供了从建模、渲染…

Ubuntu下安装向日葵:闪退

下载 https://sunlogin.oray.com/download 初次安装 $ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 234281 个文件和目录。) 准备解压 SunloginClient_15.2.0.63064_amd64.deb ..…

使用bat命令在没有java的环境下启动jar包

使用bat命令在没有java的环境下启动jar包 先看一下目录下面的文件 里面有三个比较重要的文件 clean.bat&#xff1a;用于清除占用程序的端口 一键启动_x64.bat&#xff1a;用于启动全部的项目 jre8_win64&#xff1a;用于jar所需要的java环境 注意事项&#xff1a; 关于jar…

MySQL 中优化 COUNT()查询的实用指南

在 MySQL 数据库的使用中&#xff0c;我们经常会用到 COUNT()函数来统计行数或满足特定条件的行数。然而&#xff0c;在处理大规模数据时&#xff0c;COUNT()查询可能会变得非常缓慢&#xff0c;影响数据库的性能。那么&#xff0c;如何在 MySQL 中优化 COUNT()查询呢&#xff…

Redis一些简单通用命令和认识常用数据类型和编码方式

通用命令 get() / set() 这是Redis中两个最为核心的命令。 set插入 这里的key 和 value都是字符串&#xff0c;我们可以加双引号 或者单引号&#xff0c;或者不加。 get查找 如果查询的key值不存在&#xff0c;那么会返回一个 nil &#xff0c;也就是代表空 在Redis中命令…

【C++位图】构建灵活的空间效率工具

目录 位图位图的基本概念如何用位图表示数据位图的基本操作setresettest 封装位图的设计 总结 在计算机科学中&#xff0c;位图&#xff08;Bitmap&#xff09;是一种高效的空间管理数据结构&#xff0c;广泛应用于各种场景&#xff0c;如集合操作、图像处理和资源管理。与传统…

什么是开放式耳机?具有什么特色?非常值得入手的蓝牙耳机推荐

开放式耳机是当下较为热门的一种耳机类型。它具有以下特点&#xff1a; 设计结构&#xff1a; 呈现开放式的构造&#xff0c;不会完全堵住耳道。如此一来&#xff0c;外界声音能够较容易地被使用者听到&#xff0c;在使用耳机时可以保持对周围环境的察觉。比如在户外&#xf…

绿色新纪元:光伏技术飞跃与能源体系重塑

近年来&#xff0c;光伏电池技术取得了突破性进展。新型高效光伏材料如钙钛矿、有机光伏等不断涌现&#xff0c;这些材料在转换效率和稳定性上均表现出色&#xff0c;为光伏产业注入了新的活力。同时&#xff0c;光伏组件的智能化、轻量化设计也日益成为趋势&#xff0c;使得光…

Go基础学习06-Golang标准库container/list(双向链表)深入讲解;延迟初始化技术;Element;List;Ring

基础介绍 单向链表中的每个节点包含数据和指向下一个节点的指针。其特点是每个节点只知道下一个节点的位置&#xff0c;使得数据只能单向遍历。 示意图如下&#xff1a; 双向链表中的每个节点都包含指向前一个节点和后一个节点的指针。这使得在双向链表中可以从前向后或从后…

403高效绕过目录扫描工具

403高效绕过目录扫描工具 简介 在安全测试中&#xff0c;安全测试人员信息收集时可使用此工具来进行目录枚举&#xff0c;目录进行指纹识别&#xff0c;枚举出来的403状态目录可尝试进行绕过&#xff0c;绕过403有可能获取管理员权限&#xff0c;不影响dirsearch原本功能使用。…

提升效率,C4D云渲染教程来了

因为C4D主要搭配的渲染器OCtane和Redshift都是GPU渲染器&#xff0c;阿诺德渲染器也可能直接用GPU渲染&#xff0c;所以大部分C4D渲染农场都支持用RTX2080、3090、4090系列显卡云渲染&#xff0c;云渲染追求速度&#xff0c;分机渲染任务&#xff0c;比如分100台机器渲染一个相…

wireshark1

注意看title&#xff0c;管理员的密码即为答案&#xff0c;那么咱们就直接去过找POST请求的数据包就可以了 找到flag&#xff0c;游戏结束~

TOGAF®架构开发方法:构建数字化转型新时代的正式权威指南

The Open Group与AZone权威出品&#xff0c;值得信赖 《TOGAF架构开发方法》培训课程&#xff08;点击即可学习&#xff09; 全球最具影响力的数字化转型架构出品方The Open Group 专注于企业架构师职业发展的平台AZone联合推出 The Open Group&#xff1a;行业领导者的信赖…

每日OJ题_牛客_NC40链表相加(二)_链表+高精度加法_C++_Java

目录 牛客_NC40链表相加&#xff08;二&#xff09;_链表高精度加法 题目解析 C代码 Java代码 牛客_NC40链表相加&#xff08;二&#xff09;_链表高精度加法 链表相加(二)_牛客题霸_牛客网 题目解析 模拟⾼精度加法的过程&#xff0c;只不过是在链表中模拟。 C代码 /*…

FreeRTOS(四)FreeRTOS列表与列表项

目录 列表 列表项 迷你列表项 列表和列表项的关系 列表相关API函数 列表初始化 列表项初始化 列表项插入 列表项末尾插入 列表项删除 列表遍历 在 FreeRTOS 中&#xff0c;列表&#xff08;List&#xff09;和列表项&#xff08;ListItem&#xff09;是核心数据结构&…

linux内核双向链表使用list klist

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、list和klist是什么&#xff1f;二、代码示例1.list2.klist 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; linux内核中大量使…

上市一周暴涨20%,美的的出海之路开了个好头

“宁可走错一步&#xff0c;也不能走错半步”&#xff0c;这是美的集团创始人何享健的名言&#xff0c;也代表着美的集团在扩张方面长期以来一贯的风格&#xff1a;稳健。 映射在当下&#xff0c;就是当老对手海尔智家于2020年率先登陆港交所&#xff0c;国际化策略初显成效以…