当前位置: 首页 > article >正文

代码随想录算法训练营第四十六四十七天

卡码网题目:

  • 110. 字符串接龙
  • 105. 有向图的完全联通
  • 106. 岛屿的周长
  • 107. 寻找存在的路径

其他:

今日总结
往期打卡


110. 字符串接龙

跳转: 110. 字符串接龙

学习: 代码随想录公开讲解

问题:

字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序列:

  1. 序列中第一个字符串是 beginStr。

  2. 序列中最后一个字符串是 endStr。

  3. 每次转换只能改变一个字符。

  4. 转换过程中的中间字符串必须是字典 strList 中的字符串,且strList里的每个字符串只用使用一次。

给你两个字符串 beginStr 和 endStr 和一个字典 strList,找到从 beginStr 到 endStr 的最短转换序列中的字符串数目。如果不存在这样的转换序列,返回 0。

思路:

这题的关键是如何构图,可以提前建好字典,通过遍历各位替换字母查看新建字符串是否合法来遍历下一个位置
也可以通过构建分别清除各位字母剩下字母对可能值列表的映射来确认一次转换后可能到达的位置

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码(字母替换):

import java.util.*;
public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();String beginStr = scanner.next();String endStr = scanner.next();List<String> wordList = new ArrayList<>();wordList.add(beginStr);wordList.add(endStr);for(int i=0;i<n;i++){wordList.add(scanner.next());}int count = bfs(beginStr,endStr,wordList);System.out.println(count);}public static int bfs(String beginStr,String endStr,List<String> wordList){int len = 1;Set<String> set = new HashSet<>(wordList);Set<String> visited = new HashSet<>();Queue<String> queue = new LinkedList<>();visited.add(beginStr);queue.add(beginStr);queue.add(null);while(!queue.isEmpty()){String node = queue.poll();if(node==null){if(!queue.isEmpty()){len++;queue.add(null);}continue;}char[] charArrays = node.toCharArray();for(int i=0;i<charArrays.length;i++){char old = charArrays[i];for(char j = 'a';j<='z';j++){charArrays[i] = j;String newWord = new String(charArrays);if(set.contains(newWord)&&!visited.contains(newWord)){queue.add(newWord);visited.add(newWord);if(newWord.equals(endStr)) return len+1;}}charArrays[i] = old;}}return 0;}
}

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n 2 ) O(n^2) O(n2)

代码(字母映射):

import java.util.*;
class Main{public static  void main(String[] args){Scanner sc = new Scanner(System.in);int N = sc.nextInt();String beginStr = sc.next();String endStr = sc.next();List<Map<String,List<String>>> maps = new ArrayList<>();for(int i=0;i<endStr.length();i++){String sub = endStr.substring(0,i)+endStr.substring(i+1);Map<String, List<String>> map = new HashMap<>();List<String> list = new ArrayList<>();list.add(endStr);map.put(sub,list);maps.add(map);}for(int i=0;i<N;i++){String tmp = sc.next();for(int j=0;j<endStr.length();j++){String sub = tmp.substring(0,j)+tmp.substring(j+1);Map<String, List<String>> map = maps.get(j);List<String> list = map.getOrDefault(sub,new ArrayList<>());list.add(tmp);map.put(sub,list);}}Set<String> vis = new HashSet<>();Queue<String> queue = new LinkedList<>();queue.add(beginStr);int ans = 1;while(!queue.isEmpty()){int l = queue.size();ans++;for(int i=0;i<l;i++){String tmp = queue.poll();for(int j=0;j<endStr.length();j++){String sub = tmp.substring(0,j)+tmp.substring(j+1);Map<String, List<String>> map = maps.get(j);List<String> list = map.getOrDefault(sub,new ArrayList<>());if(list.contains(endStr)){System.out.println(ans);return;}for(String str:list){if(vis.contains(str)) continue;vis.add(str);queue.add(str);}}}}System.out.println(0);}
}

105. 有向图的完全联通

跳转: 105. 有向图的完全联通

学习: 代码随想录公开讲解

问题:

给定一个有向图,包含 N 个节点,节点编号分别为 1,2,…,N。现从 1 号节点开始,如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。

例:
在这里插入图片描述
从 1 号节点可以到达任意节点,输出 1。

思路:

直接标记好bfs即可

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码:

import java.util.*;class Main {private static boolean bfs(Map<Integer, List<Integer>> map, int x, int N) {Queue<Integer> queue = new LinkedList<>();Set<Integer> vis = new HashSet<>();vis.add(x);queue.add(x);while (!queue.isEmpty()) {int tmp = queue.poll();for (int i : map.getOrDefault(tmp, new ArrayList<>())) {if (vis.contains(i)) continue;queue.add(i);vis.add(i);}}return vis.size() == N;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int K = sc.nextInt();Map<Integer, List<Integer>> map = new HashMap<>();for (int i = 0; i < K; i++) {int x = sc.nextInt();int y = sc.nextInt();List<Integer> list = map.getOrDefault(x, new ArrayList<>());list.add(y);map.put(x, list);}if (bfs(map, 1, N))System.out.println(1);else System.out.println(-1);}
}

106. 岛屿的周长

跳转: 106. 岛屿的周长

学习: 代码随想录公开讲解

问题:

给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。

你可以假设矩阵外均被水包围。在矩阵中恰好拥有一个岛屿,假设组成岛屿的陆地边长都为 1,请计算岛屿的周长。岛屿内部没有水域。

例:
在这里插入图片描述
岛屿的周长为 14。

思路:

边长和周围不是陆地的长度是一致的(越界或水都是边界,算1单位边长),直接bfs即可

复杂度:

  • 时间复杂度: O ( n m ) O(nm) O(nm)
  • 空间复杂度: O ( n m ) O(nm) O(nm)

代码:

import java.util.*;class Main {public static void main(String[] args) {int ans = 0;int[][] DISTANCE = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};Scanner sc = new Scanner(System.in);int N = sc.nextInt();int M = sc.nextInt();int[][] map = new int[N][M];for (int i = 0; i < N; i++)for (int j = 0; j < M; j++)map[i][j] = sc.nextInt();for (int i = 0; i < N; i++)for (int j = 0; j < M; j++)if (map[i][j] == 1)for (int k = 0; k < 4; k++) {int n = i + DISTANCE[k][0];int m = j + DISTANCE[k][1];if (n < 0 || m < 0 || n >= map.length || m >= map[0].length || map[n][m] == 0)ans++;}System.out.println(ans);}
}

并查集理论

学习: 代码随想录公开讲解

并查集就是把同类节点串起来,用父级是否相等判断是否有关联(对于无向图而言即:是否联通)

有两种优化方法,路径压缩和按秩合并

  • 路径压缩就是查找父级后递归回去的过程直接指向最前父级
    在这里插入图片描述

  • 按秩合并就是如果树深度不同小深度连到大的身上,减少最大查询深度的增加.
    在这里插入图片描述

107. 寻找存在的路径

跳转: 107. 寻找存在的路径

学习: 代码随想录公开讲解

问题:

给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。

你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。

思路:

并查集模板题目

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码:

import java.util.Scanner;
public class Main{static int[] father;private static boolean isSamed(int a,int b){int x = find(a);int y = find(b);return x==y;}private static void join(int a,int b){int x = find(a);int y = find(b);if(x==y) return;father[y] = father[x];}private static int find(int a){return father[a]==a?a:(father[a]=find(father[a]));}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt()+1;int m = scanner.nextInt();father = new int[n];for(int i=0;i<n;i++)father[i] = i;for(int i=0;i<m;i++){int x = scanner.nextInt();int y = scanner.nextInt();join(x,y);}int source = scanner.nextInt();int destination = scanner.nextInt();System.out.println(isSamed(source,destination)?1:0);}
}

总结

练习了bfs和并查集

往期打卡

代码随想录算法训练营第四十五天

代码随想录算法训练营第四十四天

代码随想录算法训练营第四十二&四十三天

代码随想录算法训练营第四十一天

代码随想录算法训练营第四十天

代码随想录算法训练营第三十九天

代码随想录算法训练营第三十八天

代码随想录算法训练营第三十七天

代码随想录算法训练营第三十五&三十六天

代码随想录算法训练营第三十四天

代码随想录算法训练营第三十三天(补)

代码随想录算法训练营第三十二天

代码随想录算法训练营第三十一天

代码随想录算法训练营第三十天(补)

代码随想录算法训练营第二十九天

代码随想录算法训练营第二十八天

代码随想录算法训练营第二十七天(补)

代码随想录算法训练营第二十六天

代码随想录算法训练营第二十五天

代码随想录算法训练营第二十四天

代码随想录算法训练营第二十三天

代码随想录算法训练营周末四

代码随想录算法训练营第二十二天(补)

代码随想录算法训练营第二十一天

代码随想录算法训练营第二十天

代码随想录算法训练营第十九天

代码随想录算法训练营第十八天

代码随想录算法训练营第十七天

代码随想录算法训练营周末三

代码随想录算法训练营第十六天

代码随想录算法训练营第十五天

代码随想录算法训练营第十四天

代码随想录算法训练营第十三天

代码随想录算法训练营第十二天

代码随想录算法训练营第十一天

代码随想录算法训练营周末二

代码随想录算法训练营第十天

代码随想录算法训练营第九天

代码随想录算法训练营第八天

代码随想录算法训练营第七天

代码随想录算法训练营第六天

代码随想录算法训练营第五天

代码随想录算法训练营周末一

代码随想录算法训练营第四天

代码随想录算法训练营第三天

代码随想录算法训练营第二天

代码随想录算法训练营第一天

相关文章:

代码随想录算法训练营第四十六四十七天

卡码网题目: 110. 字符串接龙105. 有向图的完全联通106. 岛屿的周长107. 寻找存在的路径 其他: 今日总结 往期打卡 110. 字符串接龙 跳转: 110. 字符串接龙 学习: 代码随想录公开讲解 问题: 字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序…...

华硕FL8000U加装16G+32G=48G内存条

华硕FL8000U加装16G32G48G内存条 一、华硕FL8000U加装内存条endl 一、华硕FL8000U加装内存条 相关视频链接: https://www.bilibili.com/video/BV1gw4dePED8/ endl...

前后端联调实战指南:Axios拦截器、CORS与JWT身份验证全解析

前言 在现代Web开发中&#xff0c;前后端分离架构已成为主流&#xff0c;而前后端联调则是开发过程中不可避免的关键环节。本文将深入探讨前后端联调中的三大核心技术&#xff1a;Axios拦截器的灵活运用、CORS跨域问题的全面解决方案以及JWT身份验证的安全实现。通过本文&…...

java高级 -Junit单元测试

Junit单元测试就是针对最小的功能&#xff1a;方法&#xff0c;编写测试代码对其进行正确性测试。用main方法进行测试的弊端是一个方法测试失败可能会影响别的方法的测试&#xff0c;也无法得到测试报告&#xff0c;需要我们自己观察数据是否正确。 此时&#xff0c;我们就需要…...

在 UVM验证环境中,验证 Out-of-Order或 Interleaving机制

在 UVM验证环境中,验证 Out-of-Order或 Interleaving机制 摘要:在 UVM (Universal Verification Methodology) 验证环境中,验证 Out-of-Order (乱序) 或 Interleaving (交错) 机制是验证复杂 SoC (System on Chip) 设计的重要任务,尤其是在验证高速接口(如 PCIe、AXI)、缓…...

V9数据库替换授权

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;9.0 文档用途 1、本文档用于指导V9数据库替换授权。 2、V9数据库授权文件为license.dat。 详细信息 1、上传新的授权文件到服务器并修改授权文件属主为…...

勇闯Chromium—— Chromium的多进程架构

问题 构建一个永不崩溃或挂起的渲染引擎几乎是不可能的,构建一个绝对安全的渲染引擎也几乎是不可能的。 从某种程度上来说,2006 年左右的网络浏览器状态与过去单用户、协作式多任务操作系统的状况类似。正如在这样的操作系统中,一个行为不端的应用程序可能导致整个系统崩溃…...

Go语言中常量的命名规则详解

1. 常量的基本命名规则 1.1. 命名格式 1. 使用const关键字声明&#xff1b; 2. 命名格式&#xff1a;const 常量名 [类型] 值&#xff1b; 3. 类型可以省略&#xff0c;由编译器推断&#xff1b; 1.2. 命名风格 大小写规则&#xff1a; 1. 首字母大写&#xff1a;导出常…...

软件质量保证与测试实验

课程  软件质量保证与测试 目的&#xff1a;练习软件测试中白盒测试方法 内容&#xff1a; 测试如下程序段&#xff1a; #include <stdio.h>int main() {int i 1, n1 0, n2 0;float sum 0.0;float average;float score[100];printf("请输入分…...

历年华东师范大学保研上机真题

2025华东师范大学保研上机真题 2024华东师范大学保研上机真题 2023华东师范大学保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school?classification1 简单一位数代数式计算 题目描述 给一个小学生都会算的1位数与1位数运算的代数式&#xff0c;请你求出这个表…...

【C++】什么是静态库?什么是动态库?

静态库与动态库详解 静态库和动态库是软件开发中两种不同的代码共享和重用机制&#xff0c;它们在链接方式、内存使用和部署方式上有显著区别。 一、静态库(Static Library) 基本概念 静态库是在编译期间被完整复制到最终可执行文件中的预编译代码集合。 主要特点 链接时…...

项目阅读:Instruction Defense

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://learnprompting.org/docs/prompt_hacking/defensive_measures/instruction https://www.doubao.com/chat/6945469301219586 速览 指令防御&#xff08;Instructio…...

springboot中拦截器配置使用

文章目录 前置拦截器代码拦截器注册疑问 前置 你使用 javaspringboot 常用在&#xff1a; 身份验证与授权&#xff0c;使用拦截器检查用户的身份验证状态和权限级别&#xff0c;确保只有经过验证且有适当权限的用户能够访问特定资源日志记录与审计性能分析与监控&#xff0…...

用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来!

用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来! 自动驾驶技术正加速变革全球交通体系,它不仅是机器学习与计算机视觉的胜利,更是一场 高效通信架构的革命。自动驾驶汽车需要实时交换信息,比如: 传感器数据(雷达、激光雷达、摄像头)V2V(车与车通信)V2X(…...

在机器学习中,L2正则化为什么能够缓过拟合?为何正则化等机制能够使一个“过度拟合训练集”的模型展现出更优的泛化性能?正则化

在现代机器学习的发展历程中&#xff0c;过拟合&#xff08;Overfitting&#xff09;始终是亟需克服的重要挑战。其表现如同在训练数据上构建过度复杂的映射函数&#xff0c;虽能实现近乎完美的拟合&#xff0c;但其泛化能力却显著受限&#xff0c;导致模型在测试集或实际应用中…...

day36 python神经网络训练

目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中&#xff0c;信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型&#xff0c;我们可以对客户的信用…...

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

k8s部署ELK补充篇&#xff1a;kubernetes-event-exporter收集Kubernetes集群中的事件 文章目录 k8s部署ELK补充篇&#xff1a;kubernetes-event-exporter收集Kubernetes集群中的事件一、kubernetes-event-exporter简介二、kubernetes-event-exporter实战部署1. 创建Namespace&a…...

【Excel VBA 】窗体控件分类

一、Excel 窗体控件分类 Excel 中的窗体控件分为两大类型&#xff0c;适用于不同的开发需求&#xff1a; 类型所在选项卡特点表单控件开发工具 → 插入 → 表单控件简单易用&#xff0c;直接绑定宏&#xff0c;兼容性好&#xff0c;适合基础自动化操作。ActiveX 控件开发工具…...

C++性能相关的部分内容

C性能相关的部分内容 与底层硬件紧密结合 大端存储和小端存储&#xff08;硬件概念&#xff09; C在不同硬件上运行的结果可能不同 比如&#xff1a;输入01234567&#xff0c;对于大端存储的硬件会先在较大地址上先进行存储&#xff0c;而对于小端存储的硬件会先在较小地址上…...

Spring Boot 项目中常用的 ORM 框架 (JPA/Hibernate) 在性能方面有哪些需要注意的点?

在 Spring Boot 项目中使用 JPA (Java Persistence API) / Hibernate (作为 JPA 的默认实现) 时&#xff0c;性能是一个非常关键的考量点。虽然 ORM 极大地简化了数据库交互&#xff0c;但如果不注意&#xff0c;很容易引入性能瓶颈。以下是一些关键的性能注意事项&#xff1a;…...

基于大模型的大肠癌全流程预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型原理与架构 2.2 大模型在医疗领域的应用现状 三、术前风险预测与准备 3.1 术前风险预测指标 3.2 大模型预测方法与结果 3.3 基于预测结果的术前准备方案 四、术中风险预测与应…...

解决DeepSeek部署难题:提升效率与稳定性的关键策略

DeepSeek 部署中常见问题及对应解决方案 随着大模型技术的快速发展&#xff0c;DeepSeek 作为国内领先的大语言模型之一&#xff0c;广泛应用于自然语言处理、智能客服、内容生成等多个领域。 然而&#xff0c;在实际部署过程中&#xff0c;许多开发者和企业会遇到一系列挑战&a…...

AI进行提问、改写、生图、联网搜索资料,嘎嘎方便!

极客侧边栏-AI板块 目前插件内已接入DeepSeek-R1满血版、Qwen3满血版 、豆包/智谱最新发布的推理模型以及各种顶尖AI大模型&#xff0c;并且目前全都可以免费不限次数使用&#xff0c;秒回不卡顿&#xff0c;联网效果超好&#xff01; 相比于市面上很多AI产品&#xff0c;极客…...

GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/147714800 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、O…...

2021年认证杯SPSSPRO杯数学建模A题(第二阶段)医学图像的配准全过程文档及程序

2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现&#xff1a; 图像的配准是图像处理领域中的一个典型问题和技术难点&#xff0c;其目的在于比较或融合同一对象在不同条件下获取的图像。例如为了更好地综合多种信息来辨识不同组织或病变&#xff0c;医生可能使用…...

CV中常用Backbone-3:Clip/SAM原理以及代码操作

前面已经介绍了简单的视觉编码器&#xff0c;这里主要介绍多模态中使用比较多的两种backbone&#xff1a;1、Clip&#xff1b;2、SAM。对于这两个backbone简单介绍基本原理&#xff0c;主要是讨论使用这个backbone。 1、CV中常用Backbone-2&#xff1a;ConvNeXt模型详解 2、CV中…...

RPC 协议详解、案例分析与应用场景

一、RPC 协议原理详解 RPC 协议的核心目标是让开发者像调用本地函数一样调用远程服务&#xff0c;其实现过程涉及多个关键组件与流程。 &#xff08;一&#xff09;核心组件 客户端&#xff08;Client&#xff09;&#xff1a;发起远程过程调用的一方&#xff0c;它并不关心调…...

dify-plugin-daemon的.env配置文件

源码位置&#xff1a;dify-plugin-daemon\.env 本文使用dify-plugin-daemon v0.1.0版本&#xff0c;主要总结了dify-plugin-daemon\.env配置文件。为了本地调试方便&#xff0c;采用本地运行时环境WSL2Ubuntu22.04方式运行dify-plugin-daemon服务。 一.服务器基本配置 服务器…...

【Python】开发工具uv

文章目录 1. uv install1.1 下载安装脚本来安装1.2 使用pipx安装uv1.3 补充 2. 考虑在离线系统上安装uv2.1 下载并上传安装包2.2 用户级安装uv&#xff08;~/.local/bin/&#xff09;2.3 补充 3. uv 管理Python解释器4. uv 管理依赖5. uv运行代码5.1 uv不在项目下执行脚本5.2 u…...

《技术择时,价值择股》速读笔记

文章目录 书籍信息概览技术择时价值择股投资策略投资心态 书籍信息 书名&#xff1a;《技术择时&#xff0c;价值择股&#xff1a;A股投资实战笔记》 作者&#xff1a;二十八画生 概览 技术择时 三种简单方法&#xff0c;教你买在起涨点 趋势行情中的“买点”判断&#xff…...