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

java数据结构与算法刷题-----LeetCode127. 单词接龙

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

    • 广度优先+双分裂蛇

在这里插入图片描述

广度优先+双分裂蛇

解题思路:时间复杂度O( n ∗ c ∗ 26 n*c*26 nc26),n是字典中单词个数,c是单词的长度,26是26个字母,空间复杂度O( n ∗ c ∗ 26 n*c*26 nc26)
  1. 此题就是求二维图起点到终点的最短路径问题。而这个问题本身只是中等难度。但是为什么这道题是困难难度呢?因为这道题太抽象了,虽然是考查图的最短路径,但是题目描述很难让人联想到图,所以以后只要遇到求最短路径的题,看看能不能抽象成二维图,能就说明考察的分裂蛇知识点。
  2. 这道题只要抽象成图的数据结构,就退化为1091题了,只要1091题掌握了,这道题就只需要你将图的逻辑抽象出来就可以了。不过这道题的处理稍微有些不同.
🏆LeetCode1091. 二进制矩阵中的最短路径https://blog.csdn.net/grd_java/article/details/137090602
  1. 将题目给的字典中每个单词都抽象成一个顶点,而两个单词如果只有一个字母不一样,就抽象成这两个单词之间有一条边。这样就有了图数据结构了。
  2. 然后创建两个Set集合(一般是用队列,但是这道题用队列反而不太好做,因为我们需要确定当前A队列遇到的新单词是否在另一个队列中)。一个从头开始走,一个从终点开始走。
  1. 因为我们是抽象的图数据结构,不知道顶点和边的关系,所以我们需要每遇到一个单词,就替换它里面每个字母生成一个新单词,只要这个新单词是题目所给字典中的单词,就说明当前这个单词和这个新单词都是存在于字典中的,且两者之间有一条边。因此这些新单词就是当前结点的下一个广度优先遍历对象

因为两个单词如果只有一个字母不一样,就抽象成这两个单词之间有一条边,但是题目本身没给这个关系,我们只能一个个枚举(修改这个单词中单个字母),时间复杂度是O( c ∗ 26 c*26 c26),c是这个单词由几个字母组成

  1. 当首尾两个集合相遇的一瞬间,其代表的路径就是最短路径(双分裂蛇的特点)。
代码:官方增加了测试用例,相同的算法原来是21ms超越100%,现在只能到达22ms,已经无法超越100%了

在这里插入图片描述

class Solution {//将单词抽象成图结构,然后通过双向广度优先算法求最短路径//每个单词都是一个顶点,如果两个单词只有一个字母不同,则他俩直接有一条边public int ladderLength(String beginWord, String endWord, List<String> wordList) {// 将单词列表转换为集合,便于快速检查单词是否存在于列表中Set<String> wordSet = new HashSet<>(wordList);if (!wordSet.contains(endWord)) return 0; // 如果结束单词不在列表中,无法完成转换,直接返回0// 使用两个集合(代替队列)分别存储从开始和结束单词出发的广度优先搜索的边界。双向广度优先,一个从起点,一个从终点找Set<String> beginSet = new HashSet<>(), endSet = new HashSet<>();int len = 1; // 初始化路径长度为1,因为开始单词也计入路径int strLen = beginWord.length(); // 单词的长度,假设所有单词长度相同HashSet<String> visited = new HashSet<>(); // 记录已访问的单词,避免重复处理,我们不更改原表,使用新的表来标志某个单词是否已经访问// 将开始和结束单词加入对应的集合beginSet.add(beginWord);endSet.add(endWord);// 只要两个集合都非空,就继续执行双向搜索while (!beginSet.isEmpty() && !endSet.isEmpty()) {// 总是选择较小的集合进行扩展,以减少下一轮处理的单词数量if (beginSet.size() > endSet.size()) {Set<String> temp = beginSet;beginSet = endSet;endSet = temp;}Set<String> temp = new HashSet<>(); // 用于存储下一轮扩展的结果,如果是队列就不需要这步for (String word : beginSet) {//遍历当前队列(集合)中结点,让他们走一步,每次只走一步char[] chs = word.toCharArray();// 尝试更改当前单词的每一个字符,看看是否可以接龙for (int i = 0; i < chs.length; i++) {for (char c = 'a'; c <= 'z'; c++) {//用a到z依次替换char old = chs[i]; // 保存原始字符chs[i] = c;//用a-z依次替换i位置字符String target = String.valueOf(chs); // 生成新单词// 如果新单词在另一端集合中,说明找到了最短路径if (endSet.contains(target)) return len + 1;// 如果新单词未访问且存在于单词列表中,则加入下一轮搜索if (!visited.contains(target) && wordSet.contains(target)) {temp.add(target);visited.add(target); // 标记为已访问}chs[i] = old; // 恢复原始字符,以便下一次修改}}}beginSet = temp; // 更新beginSet为下一轮搜索的边界len++; // 每完成一轮双向搜索,路径长度加1,因为我们规定,每次只走一步}return 0; // 如果无法连接开始和结束单词,返回0}
}

相关文章:

java数据结构与算法刷题-----LeetCode127. 单词接龙

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 广度优先双分裂蛇 广度优先双分裂蛇 解题思路&#xff1a;时间复…...

pytorch中的torch.nn.Linear

torch.nn.Linear是pytorch中的线性层&#xff0c;应该是最常见的网络层了&#xff0c;官方文档&#xff1a;torch.nn.Linear。 torch.nn.Linear(in_features, out_features, biasTrue, deviceNone, dtypeNone)其中&#xff0c;in_features表示输入的维度&#xff1b;out_featu…...

03-MySQl数据库的-用户管理

一、创建新用户 mysql> create user xjzw10.0.0.% identified by 1; Query OK, 0 rows affected (0.01 sec) 二、查看当前数据库正在登录的用户 mysql> select user(); ---------------- | user() | ---------------- | rootlocalhost | ---------------- 1 row …...

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎&#xff0c;中文互联网领域领先的问答社区和原创内容平台&#xff0c;2011 年 1 月正式上线&#xff0c;月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法&#xff0c;数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。 为了提…...

JWFD流程图转换为矩阵数据库的过程说明

在最开始设计流程图的时候&#xff0c;请务必先把开始节点和结束节点画到流程图上面&#xff0c;就是设计器面板的最开始两个按钮&#xff0c;先画开始点和结束点&#xff0c;再画中间的流程&#xff0c;然后保存&#xff0c;这样提交到矩阵数据库就不会出任何问题&#xff0c;…...

GT收发器第一篇_总体结构介绍

文章目录 前言GT收发器介绍 前言 之前写过一篇简单介绍GT的文章https://blog.csdn.net/m0_56222647/article/details/136730026&#xff0c;可以先通过这篇文章对整体进行简单了解一下。 GT收发器介绍 参考xilinx手册ug476 对于7系列的FPGA&#xff0c;共有3个系列&#xf…...

[图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示

文章目录 工程效果重要代码完整代码参考 工程效果 载入图片&#xff0c;并在左侧显示原始图片、二值化图片和灰度图片。 双击左侧的图片控件&#xff0c;可以在右侧的大控件中&#xff0c;显示双击的图片。 初始画面&#xff1a; 载入图片&#xff1a; 双击左侧的第二个控件…...

centos7.5 安装gitlab-ce (Omnibus)

一、安装前置依赖 # 安装基础依赖 $ sudo yum -y install policycoreutils openssh-server openssh-clients postfix# 启动 ssh 服务 & 设置为开机启动 $ sudo systemctl enable sshd & sudo systemctl start sshd二、安装gitlab rpm包 # 下载并执行社区版脚本 curl …...

深入理解MapReduce:从Map到Reduce的工作原理解析

当谈到分布式计算和大数据处理时&#xff0c;MapReduce是一个经典的范例。它是一种编程模型和处理框架&#xff0c;用于在大规模数据集上并行运行计算任务。MapReduce包含三个主要阶段&#xff1a;Map、Shuffle 和 Reduce。 ** Map 阶段 ** Map 阶段是 MapReduce 的第一步&am…...

初始Java篇(JavaSE基础语法)(5)(类和对象(上))

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 面向对象的初步认知 面向对象与面向过程的区别 类的定义和使用 类的定义格式 类的实例化 this引用 什么是this引用&#xff1f; this引用…...

机器人---人形机器人之技术方向

1 背景介绍 在前面的文章《行业杂谈---人形机器人的未来》中&#xff0c;笔者初步介绍了人形机器人的未来发展趋势。同智能汽车一样&#xff0c;它也会是未来机器人领域的一个重要分支。目前地球上最高智慧的结晶体就是人类&#xff0c;那么人形机器人的未来会有非常大的发展空…...

MySQL MHA高可用数据库

文章目录 MySQL MHA高可用数据库搭建MySQL MHA模拟故障故障修复&#xff1a; MySQL MHA高可用数据库 MHA&#xff08;MySQL High Availability&#xff09;是一个开源的高可用解决方案&#xff0c;用于实现MySQL主从复制集群的故障自动切换。MHA的主要目的是确保MySQL数据库集…...

LVS(Layout versus schematic)比的是什么?

概述 LVS不是一个简单地将版图与电路原理图进行比较的过程&#xff0c;它需要分两步完成。第一步“抽取”&#xff0c;第二步“比较”。首先根据LVS提取规则&#xff0c;EDA 工具从版图中抽取出版图所确定的网表文件&#xff1b;然后将抽取出的网表文件与电路网表文件进行比较…...

从0开始搭建基于VUE的前端项目(三) Vuex的使用与配置

准备与版本 vuex 3.6.2(https://v3.vuex.vuejs.org/zh/)概念 vuex是什么? 是用作 【状态管理】的 流程图如下 state 数据状态,成员是个对象 mapState 组件使用this.$store.state.xxx获取state里面的数据 getters 成员是个函数,方便获取state里面的数据,也可以加工数据 ma…...

python统计分析——双样本均值比较

参考资料&#xff1a;python统计分析【托马斯】 1、配对样本t检验 在进行两组数据之间的比较时&#xff0c;有两种情况必须区分开。在第一种情况中&#xff0c;同一对象在不同时候的两个记录值进行相互比较。例如&#xff0c;用学生们进入初中时的身高和他们一年后的身高&…...

三台电机的顺启逆停

1&#xff0c;开启按钮输入信号是 电机一开始启动&#xff0c;5秒回电机2启动 &#xff0c;在5秒电机三启动 关闭按钮输入时电机3关闭 &#xff0c;5秒后电机2关闭 最后电机一关闭 2&#xff0c;思路开启按钮按下接通电机1 并且接通定时器T0 定时器T0 到时候接通电机2 并且开…...

彩虹外链网盘界面UI美化版超级简洁好看

彩虹外链网盘&#xff0c;是一款PHP网盘与外链分享程序&#xff0c;支持所有格式文件的上传&#xff0c;可以生成文件外链、图片外链、音乐视频外链&#xff0c;生成外链同时自动生成相应的UBB代码和HTML代码&#xff0c;还可支持文本、图片、音乐、视频在线预览&#xff0c;这…...

企业微信知识库:从了解到搭建的全流程

你是否也有这样的疑惑&#xff1a;为什么现在的企业都爱创建企业微信知识库&#xff1f;企业微信知识库到底有什么用&#xff1f;如果想要使用企业微信知识库企业应该如何创建&#xff1f;这就是我今天要探讨的问题&#xff0c;感兴趣的话一起往下看吧&#xff01; | 为什么企业…...

【华为OD机试C++】合并表记录

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例1示例2代码描述 数据表记录包含表索引index和数值value(int范围的…...

uniapp中使用u-popup组件导致的弹框下面的页面可滑动现象

添加代码&#xff1a; touchmove.stop.prevent"()>{}"...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...