算法|ss dfsbfs

  • 200.岛屿数量—1
  • 207.课程表—1
  • 547.省份数量
  • 695.岛屿的最大面积
  • 17.15.最长单词

200.岛屿数量—1

/*** @param {character[][]} grid* @return {number}*/
var numIslands = function (grid) {let ans = 0;let m = grid.length;let n = grid[0].length;const dirs = [[1, 0],[-1, 0],[0, 1],[0, -1],];const checkList = Array(m).fill(0).map(() => Array(n).fill(0));for (let i = 0; i < m; i++) {for (let j = 0; j < n; j++) {if (grid[i][j] === "1" && checkList[i][j] === 0) {ans += bfs(i, j);}}}function bfs(i, j) {let count = 1;const queue = [];queue.push([i, j]);while (queue.length) {const [x, y] = queue.pop();for (let [dx, dy] of dirs) {let nextX = dx + x;let nextY = dy + y;if (nextX >= 0 &&nextX < m &&nextY >= 0 &&nextY < n &&grid[nextX][nextY] === "1" &&checkList[nextX][nextY] === 0) {queue.push([nextX, nextY]);checkList[nextX][nextY] = 1;}}}return count;}return ans;
};
numIslands([["1", "1", "1", "1", "0"],["1", "1", "0", "1", "0"],["1", "1", "0", "0", "0"],["0", "0", "0", "0", "0"],
]);

207.课程表—1

// numCourses = 2, prerequisites = [[1,0]]
/*** @param {number} numCourses* @param {number[][]} prerequisites* @return {boolean}*/
var canFinish = function (numCourses, prerequisites) {const map = {};const nextMap = {};for (let [a, b] of prerequisites) {if (map[a] === undefined) {map[a] = 0;}if (nextMap[b] === undefined) {nextMap[b] = [];}map[a] += 1;nextMap[b].push(a);if (map[b] === undefined) map[b] = 0;}//const queue = [];for (let ch in map) {if (map[ch] === 0) {queue.push(ch);}}while (queue.length) {const cur = queue.shift();const nextCur = nextMap[cur];if (!nextCur) continue;for (let ch of nextCur) {map[ch] -= 1;if (map[ch] === 0) {queue.push(ch);}}}//   console.log(map);return Object.values(map).every((item) => item === 0);
};
canFinish(2, [[1, 0],[0, 1],
]);

547.省份数量

/*** @param {number[][]} isConnected* @return {number}*/
// 思路
// 遍历一层, 对没有检查的可以看作是一个省份
// 递归dfs,对相连的城市都去dfs一下,然后设置对应的checklist为1,
// dfs的作用就是使相连的城市的checklist都为1
var findCircleNum = function (isConnected) {const n = isConnected.length;const checklist = Array(n).fill(0);let ans = 0;for (let i = 0; i < n; i++) {if (checklist[i] === 0) {dfs(i);ans += 1;}}//   console.log(ans);return ans;function dfs(idx) {checklist[idx] = 1;for (let j = 0; j < n; j++) {if (j !== idx && checklist[j] === 0 && isConnected[idx][j] === 1) {dfs(j);}}}
};
findCircleNum([[1, 0, 0],[0, 1, 0],[0, 0, 1],
]);
// [[1,0,0],[0,1,0],[0,0,1]]

695.岛屿的最大面积

/*** @param {number[][]} grid* @return {number}*/
// 思路
// dfs的返回值 应该怎么定义
// 什么条件下返回
// 合格返回 1
// 不合格返回0
var maxAreaOfIsland = function (grid) {const m = grid.length;const n = grid[0].length;let ans = 0;let dirs = [[-1, 0],[1, 0],[0, 1],[0, -1],];const checklist = Array(m).fill(0).map(() => Array(n).fill(0));for (let i = 0; i < m; i++) {for (let j = 0; j < n; j++) {if (checklist[i][j] === 0 && grid[i][j] === 1) {ans = Math.max(ans, dfs(i, j));}}}//   console.log(ans);return ans;function dfs(x, y) {// 不符合条件的return 0if (x < 0 ||x >= m ||y < 0 ||y >= n ||grid[x][y] === 0 ||checklist[x][y] === 1) {return 0;}let ans = 1;// 符合条件的返回anschecklist[x][y] = 1;for (let [dx, dy] of dirs) {ans += dfs(dx + x, dy + y);}return ans;}
};
maxAreaOfIsland([[0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],[0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],[0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0],[0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
]);
// [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]

17.15.最长单词

/*** @param {string[]} words* @return {string}*/
// 思路 排序+dfs
// 单词降序
// 遍历单词组, 校验每一个单词
// 校验中采用递归写法
// 看字符串是否包含某个单词,如果包含了,则继续递归, idx=idx+temp.length
// 终止条件: idx的长度大于等于最长单词的长度
var longestWord = function (words) {// 降序排序 第一个word就是结果words.sort((a, b) =>a.length !== b.length ? b.length - a.length : a > b ? 1 : -1);for (let word of words) {if (isValid(word, 0)) {return word;}}return "";function isValid(word, idx) {// 终止条件if (idx >= word.length) return true;for (let i = 0; i < words.length; i++) {let temp = words[i];if (word === temp) continue;//   从idx位置截取到末尾 包含某个单词,则递归 下次的idx为当前idx+包含单词的长度if (word.substring(idx).indexOf(temp) === 0) {let res = isValid(word, idx + temp.length);if (res) return true;}}return false;}
};
console.log(longestWord(["cat", "banana", "dog", "nana", "walk", "walker", "dogwalker"])
);// 输入: ["cat","banana","dog","nana","walk","walker","dogwalker"]
// 输出: "dogwalker"
// 解释: "dogwalker"可由"dog"和"walker"组成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭开“栈和队列”的神秘面纱

前言 在线性表中不止有顺序表和链表&#xff0c;今天的主角就如标题所说--->认识栈和队列。把他们俩放一起总结是有原因的&#xff0c;还请看官听我娓娓道来~ 什么是栈&#xff1f; 栈&#xff08;stack&#xff09;是限定仅在表尾进行插入和删除操作的线性表 咱可以把栈理…

Pro版 v3.0首页DIY热区神器,让图片更全能!

Pro版v3.0新增了很多新功能&#xff0c;为了方便大家能快速了解使用&#xff0c;今天&#xff0c;我们就开始来逐步了解这些新功能。 在此次更新中&#xff0c;Pro版的首页DIY功能实现了全新重构升级&#xff0c;新增了DIY热区、视频、排行榜、积分商城、预售、签到组件&#…

python类中的__call__函数有什么用法?

在 Python 中,如果一个类实现了 __call__ 方法,那么这个类的实例对象就可以像函数一样被调用。当调用一个实现了 __call__ 方法的对象时,实际上会调用这个对象的 __call__ 方法。 __call__ 方法的主要作用是让对象具有函数的行为,可以在调用对象时执行一些操作。这对于需要…

【Hadoop技术框架-MapReduce和Yarn的详细描述和部署】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;今天的内容主要是Hadoop的后两个组件&#xff1a;MapReduce和yarn的相关内容。同时还有Hadoop的完整流程。希望对大家有所帮助。感谢大家关注点赞。 &#x1f49e;&#x1f49e;前路漫漫&…

mysql学习笔记NO.1

MySQL入门笔记 1.MySQL 5.7 安装配置 下载MySQL 5.7安装包并进行安装。配置MySQL的环境变量。启动MySQL服务。 2.命令行连接到MySQL 打开命令行终端。输入以下命令连接到MySQL服务器&#xff1a; mysql -u 用户名 -p 输入密码以登录MySQL服务器。​​​​​​​ 3.SQLyog 下载并…

蓝桥杯刷题-07-整数删除-暴力

给定一个长度为 N 的整数数列&#xff1a;A1, A2, . . . , AN。你要重复以下操作 K 次&#xff1a; 每次选择数列中最小的整数&#xff08;如果最小值不止一个&#xff0c;选择最靠前的&#xff09;&#xff0c;将其删除。并把与它相邻的整数加上被删除的数值。输出 K 次操作后…

深度学习实战73-基于多模态CLIP模型的实战项目,CLIP模型的架构介绍与代码实现

大家好,我是微学AI,今天给大家介绍一下深度学习实战73-基于多模态CLIP模型的实战项目,CLIP模型的架构介绍与代码实现。多模态CLIP(Contrastive Language-Image Pre-training)模型是一种深度学习模型,其核心设计理念是通过大规模的对比学习训练,实现图像与文本之间的跨模…

【JAVASE】面向对象程序三大特性之一( 封装)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609;\n &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 目标&#xff1a; 1.包的使用 2.static关键字的使用 3.代码…

Python+Vuecil笔记

Nginx 进入目录: C:\nginx-1.20.2\nginx-1.20.2 start nginx 开始 nginx -s stop 停止 nginx -s quit 退出CSS 通过标签去写css 循环展示数据 JS 点击时执行事件 Django 配置media 在seetings里面修改 STATIC_URL /static/ MEDIA_URL /upload/ MEDIA_ROOT os.pat…

windows terminal美化教程

安装terminal 微软商店下载安装terminal 配置文件 进入terminal&#xff0c;打开设置。 {"$schema": "https://aka.ms/terminal-profiles-schema",// global settings"profiles": {// profile settings"defaults": {// default sett…

阿里云服务器租赁一年收费标准

阿里云服务器租用价格表2024年最新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核…

Docker设置时区

Dockerfile中设置时区的方法 # 设置环境变量TZ ENV TZAsia/Shanghai# 配置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone创建容器时设置时区 将宿主机与容器的时间进行挂载&#xff0c;直接使用宿主机的时区 -v /etc/lo…

【亲测有效】微信公众号设置菜单栏显示,未开启自定义菜单,微信公众平台自定义菜单接口开发

微信公众平台自定义菜单接口开发 问题:运营人员在设置微信公众号设置菜单栏显示,未开启自定义菜单解决方案(微信公众平台自定义菜单接口开发):自定义菜单-创建接口请求链接完整代码第一步:在WeChat类里添加代码情况一:没有WeChat类情况,如果已有请看情况二情况二:已有…

【系统架构师】-软件架构设计

1、软件架构的概念 架构的本质 1、软件架构为软件系统提供了一个结构、行为和属性的高级抽象。 2、软件架构风格是特定应用领域的惯用模式&#xff0c;架构定义一个词汇表和一组约束。 架构的作用 1、软件架构是项目干系人进行交流的手段。 2、软件架构是可传递和可复用的模型…

day21java学习打卡:匿名对象的使用

/* * 一.理解“万事万物皆对象” * 1.在java语言范畴中&#xff0c;我们的都将功能&#xff0c;结构封装到类中&#xff0c;通过类的实例化, * 来调节具体的功能结构 * >Scanner&#xff0c;String * >文件&#xff1a;File * >网络资源&#xff1a…

番茄 短abogus补环境

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

简化开发与提升可维护性的编程范式-声明式 API

目录 什么是声明式 API 声明式 API 的优势 声明式 API 的应用 声明式 API 面临的挑战 小结 声明式 API 是一种现代编程范式&#xff0c;特别是在云计算和容器编排领域被广泛应用&#xff0c;其设计理念强调通过声明所需的目标状态来管理复杂系统&#xff0c;而非具体指定达…

端到端单倍型参考基因组揭示了三倍体香芽蕉型香蕉亚基因组的分歧和疾病抵抗力-文献精读-5

T2T基因组文献分享Telomere-to-telomere haplotype-resolved reference genome reveals subgenome divergence and disease resistance in triploid Cavendish banana 三倍体植物基因组的文献&#xff0c;各位同仁还有什么有特色的基因组评论区留言~ 摘要 香蕉是世界上最重要…

JavaEE——手把手教你实现简单的 servlet 项目

文章目录 一、什么是 Servlet二、创建一个简单的 Servlet 程序1. 创建项目2.引入依赖3. 创建目录4.编写代码5. 打包程序6. 部署7.验证整体过程总结 三、使用 Smart Tomcat 插件简化项目创建四、创建项目时可能遇到的几个问题。 一、什么是 Servlet Servlet 是一种实现 动态页面…

12、最小覆盖子串

如何想到这个解法 问题的特点&#xff1a; 首先&#xff0c;认识到这是一个关于子串的问题&#xff0c;而且需要考虑子串的最小长度。这提示我们可能需要使用一种方式来逐步探索不同的子串。滑动窗口的适用性&#xff1a;滑动窗口是处理子串问题的常用技巧&#xff0c;特别是当…