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

每日一道算法题

题目:单词接龙 II

给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:

  1. 每次转换只能改变一个字母。
  2. 转换过程中的中间单词必须是字典中的单词。

示例 1

  • 输入
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]

  • 输出
[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"]
]

示例 2

  • 输入
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log"]

  • 输出[]
  • 解释:endWord "cog" 不在字典中,所以不存在符合要求的转换序列。

提示

  • 1 <= beginWord.length <= 5
  • endWord.length == beginWord.length
  • 1 <= wordList.length <= 500
  • wordList[i].length == beginWord.length
  • beginWordendWord 和 wordList[i] 由小写英文字母组成
  • beginWord!= endWord
  • wordList 中的所有单词互不相同

解题思路提示

  1. 双向广度优先搜索(BFS)
    • 常规的广度优先搜索从起始单词开始,一层一层地扩展到目标单词。双向 BFS 则从起始单词和目标单词同时开始扩展,这样可以减少搜索空间,提高效率。
    • 可以使用两个队列,分别存储从起始单词和目标单词开始扩展的单词。
    • 同时,使用两个集合来记录已经访问过的单词,避免重复访问。
  2. 构建路径
    • 在进行双向 BFS 的过程中,不仅要记录每个单词是从哪个单词扩展而来的,还要记录扩展的方向(从起始单词还是目标单词扩展而来)。
    • 当两个方向的搜索相遇时,根据记录的路径信息,从相遇的单词开始,分别向起始单词和目标单词回溯,构建出所有的最短转换序列。
  3. 单词转换
    • 为了快速找到可以通过改变一个字母得到的单词,可以预先构建一个辅助数据结构,例如将每个单词的每个位置的字母替换为通配符(如 *),然后将具有相同通配符形式的单词存储在一个哈希表中。这样在扩展单词时,可以通过通配符快速找到所有可能的转换单词。

 代码实现(JAVA)

import java.util.*;public class WordLadderII {public List<List<String>> findLadders(String beginWord, String endWord, List<String> wordList) {// 存储最终结果List<List<String>> result = new ArrayList<>();// 将 wordList 转换为 HashSet 以提高查找效率Set<String> wordSet = new HashSet<>(wordList);// 如果 endWord 不在 wordSet 中,直接返回空列表if (!wordSet.contains(endWord)) {return result;}// 用于存储每个单词到其前一个单词的映射,用于构建路径Map<String, List<String>> graph = new HashMap<>();// 用于存储从 beginWord 到每个单词的最短距离Map<String, Integer> distance = new HashMap<>();// 初始化队列,将 beginWord 加入队列Queue<String> queue = new LinkedList<>();queue.offer(beginWord);distance.put(beginWord, 0);// 进行广度优先搜索while (!queue.isEmpty()) {int size = queue.size();boolean foundEnd = false;for (int i = 0; i < size; i++) {String currentWord = queue.poll();int currentDistance = distance.get(currentWord);// 生成所有可能的相邻单词List<String> neighbors = getNeighbors(currentWord, wordSet);for (String neighbor : neighbors) {// 如果该相邻单词还未被访问过if (!distance.containsKey(neighbor)) {distance.put(neighbor, currentDistance + 1);if (neighbor.equals(endWord)) {foundEnd = true;} else {queue.offer(neighbor);}}// 如果该相邻单词的距离等于当前单词的距离加 1if (distance.get(neighbor) == currentDistance + 1) {graph.computeIfAbsent(neighbor, k -> new ArrayList<>()).add(currentWord);}}}if (foundEnd) {break;}}// 回溯构建路径List<String> path = new ArrayList<>();path.add(endWord);backtrack(endWord, beginWord, graph, path, result);return result;}// 生成所有可能的相邻单词private List<String> getNeighbors(String word, Set<String> wordSet) {List<String> neighbors = new ArrayList<>();char[] chars = word.toCharArray();for (int i = 0; i < chars.length; i++) {char originalChar = chars[i];for (char c = 'a'; c <= 'z'; c++) {if (c == originalChar) {continue;}chars[i] = c;String newWord = new String(chars);if (wordSet.contains(newWord)) {neighbors.add(newWord);}}chars[i] = originalChar;}return neighbors;}// 回溯构建路径private void backtrack(String word, String beginWord, Map<String, List<String>> graph, List<String> path, List<List<String>> result) {if (word.equals(beginWord)) {List<String> newPath = new ArrayList<>(path);Collections.reverse(newPath);result.add(newPath);return;}List<String> prevWords = graph.get(word);if (prevWords != null) {for (String prevWord : prevWords) {path.add(prevWord);backtrack(prevWord, beginWord, graph, path, result);path.remove(path.size() - 1);}}}public static void main(String[] args) {WordLadderII solution = new WordLadderII();String beginWord = "hit";String endWord = "cog";List<String> wordList = Arrays.asList("hot", "dot", "dog", "lot", "log", "cog");List<List<String>> result = solution.findLadders(beginWord, endWord, wordList);for (List<String> path : result) {System.out.println(path);}}
}

代码说明:

  1. findLadders 方法

    • 首先将 wordList 转换为 HashSet 以提高查找效率。
    • 使用 graph 存储每个单词到其前一个单词的映射,distance 存储从 beginWord 到每个单词的最短距离。
    • 进行广度优先搜索,生成所有可能的相邻单词,并更新 distance 和 graph
    • 当找到 endWord 时,调用 backtrack 方法回溯构建路径。
  2. getNeighbors 方法

    • 生成当前单词的所有可能相邻单词,通过将每个位置的字母替换为其他字母,并检查是否在 wordSet 中。
  3. backtrack 方法

    • 从 endWord 开始回溯,根据 graph 中的映射构建路径,当回溯到 beginWord 时,将路径反转并添加到结果列表中。

相关文章:

每日一道算法题

题目&#xff1a;单词接龙 II 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典 wordList&#xff0c;找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则&#xff1a; 每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的…...

Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

Java小白入门教程:两大类型的修饰符以及示例

目录 一、访问控制修饰符 1、default 就是啥都不写的那种 2、private 私有 3、public 公开 4、protected 受保护的 二、非访问控制修饰符 1、static 静态 2、final 最终 3、abstract 抽象 4、synchronized 锁 5、transient 瞬态 6、volatile 易变 一、访问控制修饰符…...

正则表达式入门

入门 1、提取文章中所有的英文单词 //1&#xff0e;先创建一个Pattern对象&#xff0c;模式对象&#xff0c;可以理解成就是一个正则表达式对象 Pattern pattern Pattern.compile("[a-zA-Z]"); //2&#xff0e;创建一个匹配器对象 //理解:就是 matcher匹配器按照p…...

云原生(五十二) | DataGrip软件使用

文章目录 DataGrip软件使用 一、DataGrip基本使用 二、软件界面介绍 三、附件文件夹到项目中 四、DataGrip设置 五、SQL执行快捷键 DataGrip软件使用 一、DataGrip基本使用 1. 软件界面介绍 2. 附加文件夹到项目中【重要】 3. DataGrip配置 快捷键使用&#xff1a;C…...

如何成为一名 Python 全栈工程师攻略

## 从零基础到全栈工程师&#xff1a;Python 学习路线&#xff08;细化版&#xff09; **目标&#xff1a;** 掌握 Python 编程&#xff0c;并能独立开发全栈应用。 **学习路线&#xff1a;** ### 第一阶段&#xff1a;Python 基础 (4-6 周) **目标&#xff1a;** 掌握 Pyt…...

无需云端服务器: 三步实现DeepSeek大模型本地化部署deepseek、Ollama和Chatbox

&#x1f389;无需云端&#xff01;三步实现DeepSeek大模型本地化部署&#x1f60e; 还在为云端AI服务的高昂费用而苦恼&#xff1f;是否总担心数据隐私会在云端泄露&#xff1f;别愁啦&#xff01;DeepSeek R1——这款与OpenAI o1性能相媲美的开源大模型&#xff0c;结合Olla…...

mysql教程

MySQL 教程 一、简介 MySQL 是一个开源的关系型数据库管理系统&#xff0c;广泛应用于各种规模的项目中。以下是一些基础知识和常用操作。 二、安装与启动 安装&#xff1a;根据操作系统选择合适的安装包进行安装。启动&#xff1a;通过命令行或服务管理工具启动 MySQL 服务…...

【自学笔记】JavaWeb的重点知识点-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 JavaWeb知识点一、基础概念二、项目结构三、Tomcat服务器四、数据库连接&#xff08;JDBC&#xff09;五、前端技术六、高级技术 总结 以下是JavaWeb知识点的MD格式…...

项目升级Sass版本或升级Element Plus版本遇到的问题

项目升级Sass版本或升级Element Plus版本遇到的问题 如果项目有需求需要用到高版本的Element Plus组件&#xff0c;则需要升级相对应的sass版本&#xff0c;Element 文档中有提示&#xff0c;2.8.5及以后得版本&#xff0c;sass最低支持的版本为1.79.0&#xff0c;所升级sass、…...

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题&#xff1a;Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者&#xff1a;Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…...

char和varchar的区别、varchar(?)中问号部分的含义、索引的作用

char和varchar的区别 char是固定长度类型&#xff0c;当输入字符不满设定的固定长度时依旧占用固定长度的空间&#xff0c;补充空字节。 最大长度为255个字符 优点&#xff1a;效率高&#xff0c;在涉及索引和排序时缺点&#xff1a;占用空间使用场景&#xff1a;存储密码的…...

.NET9增强OpenAPI规范,不再内置swagger

ASP.NETCore in .NET 9.0 OpenAPI官方文档ASP.NET Core API 应用中的 OpenAPI 支持概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/overview?viewaspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/ope…...

qsort应用

每天都会收到ai个礼物&#xff0c;到第n天的时候&#xff0c;然然发现他的宿舍被礼物搞得一团糟&#xff0c;所以然然打算到超市买一个柜子装礼物。但是超市有m个柜子&#xff0c;每个柜子都有不同的容量bi&#xff0c;然然想知道每个柜子最多可以装多少天的礼物&#xff08;可…...

仿真设计|基于51单片机的贪吃蛇游戏

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 利用单片机8*8点阵实现贪吃蛇游戏的控制。 仿真演示视频&#xff1a; 51-基于51单片机的贪吃蛇游…...

Linux内核中的页面错误处理机制与按需分页技术

在现代操作系统中,内存管理是核心功能之一,而页面错误(Page Fault)处理机制是内存管理的重要组成部分。当程序访问一个尚未映射到物理内存的虚拟地址时,CPU会触发页面错误异常,内核需要捕获并处理这种异常,以决定如何响应,例如加载缺失的页面、处理权限错误等。Linux内…...

Baklib推动企业知识管理创新与效率提升的全面探讨

内容概要 在当今数字化转型的背景下&#xff0c;有效的知识管理显得尤为重要。知识是企业的核心资产&#xff0c;而传统的管理方式往往无法充分发挥这些知识的价值。因此&#xff0c;企业亟需一种高效、灵活的解决方案来应对这一挑战。Baklib作为一款先进的企业级知识管理平台…...

NLP自然语言处理通识

目录 ELMO 一、ELMo的核心设计理念 1. 静态词向量的局限性 2. 动态上下文嵌入的核心思想 3. 层次化特征提取 二、ELMo的模型结构与技术逻辑 1. 双向语言模型&#xff08;BiLM&#xff09; 2. 多层LSTM的层次化表示 三、ELMo的运行过程 1. 预训练阶段 2. 下游任务微调 四、ELMo的…...

计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

【编译原理实验二】——自动机实验:NFA转DFA并最小化

本篇适用于ZZU的编译原理课程实验二——自动机实验&#xff1a;NFA转DFA并最小化&#xff0c;包含了实验代码和实验报告的内容&#xff0c;读者可根据需要参考完成自己的程序设计。 如果是ZZU的学弟学妹看到这篇&#xff0c;那么恭喜你&#xff0c;你来对地方啦&#xff01; 如…...

Hive:复杂数据类型之Map函数

Map函数 是Hive里面的一种复杂数据类型, 用于存储键值对集合。Map中的键和值可以是基础类型或复合类型&#xff0c;这使得Map在处理需要关联存储信息的数据时非常有用。 定义map时,需声明2个属性: key 和 value , map中是 key value 组成一个元素 key-value, key必须为原始类…...

C++ 中的引用(Reference)

在 C 中&#xff0c;引用&#xff08;Reference&#xff09;是一种特殊的变量类型&#xff0c;它提供了一个已存在变量的别名。引用在很多场景下都非常有用&#xff0c;比如函数参数传递、返回值等。下面将详细介绍 C 引用的相关知识。 1. 引用的基本概念和语法 引用是已存在…...

密码学的数学基础1-整数 素数 和 RSA加密

数学公式推导是密码学的基础, 故开一个新的课题 – 密码学的数学基础系列 素数 / 质数 质数又称素数。 一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数&#xff1b;否则称为合数&#xff08;规定1既不是质数也不是合数&#xff0…...

Java锁自定义实现到aqs的理解

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解锁&#xff0c;能自定义实现锁通过自定义锁的实现复习Thread和Object的相关方法开始尝试理解Aqs, 这样后续基于Aqs的的各种实现将能更好的理解 目录 锁的…...

STM32-时钟树

STM32-时钟树 时钟 时钟...

android 圆形弹窗摄像头开发踩坑——源码————未来之窗跨平台操作

一、飘窗刷脸&#xff0c;拍照采用飘窗 刷脸认证安卓接口采用飘窗具有在不干扰用户主要操作的前提下以醒目方式引导用户完成认证&#xff0c;且能灵活定制样式以提升用户体验和认证效率的优点 二、踩坑只有一个扇形 <?xml version"1.0" encoding"utf-8&quo…...

markdown公式特殊字符

个人学习笔记 根号 在 Markdown 中&#xff0c;要表示根号 3&#xff0c;可以使用 LaTeX 语法来实现。常见的有以下两种方式&#xff1a; 行内公式形式&#xff1a;使用一对美元符号 $ 将内容包裹起来&#xff0c;即 $\sqrt{3}$ &#xff0c;在支持 LaTeX 语法渲染的 Markdow…...

Web-3.0学习路线

方向学习内容✅ 区块链基础区块链、智能合约、共识机制✅ 智能合约Solidity / Rust&#xff08;Ethereum / Solana&#xff09;✅ 前端React.js, Next.js, Web3.js, ethers.js✅ 后端Node.js, Python, Golang&#xff08;链上数据&#xff09;✅ 存储IPFS, Arweave, Filecoin&a…...

【算法设计与分析】实验5:贪心算法—装载及背包问题

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握贪心算法求解问题的思想&#xff1b;针对不同问题&#xff0c;会利用贪心算法进行问题建模、求解以及时间复杂度分析&#x…...

使用 cmake

使用前注意 : CMake是一种跨平台的构建系统&#xff0c;它用于管理软件构建过程&#xff0c;尤其适合多语言、多配置的项目。CMake不直接构建软件&#xff0c;而是生成特定构建工具&#xff08;如Makefile或Visual Studio项目&#xff09;所需的配置文件。 如果仅仅使用 qt 编…...

万物皆有联系:驼鸟和布什

布什&#xff1f;一块布十块钱吗&#xff1f;不是&#xff0c;大家都知道&#xff0c;美国有两个总统&#xff0c;叫老布什和小布什&#xff0c;因为两个布什总统&#xff08;父子俩&#xff09;&#xff0c;大家就这么叫来着&#xff0c;目的是为了好区分。 布什总统的布什&a…...

PHP实现混合加密方式,提高加密的安全性(代码解密)

代码1&#xff1a; <?php // 需要加密的内容 $plaintext 授权服务器拒绝连接;// 1. AES加密部分 $aesKey openssl_random_pseudo_bytes(32); // 生成256位AES密钥 $iv openssl_random_pseudo_bytes(16); // 生成128位IV// AES加密&#xff08;CBC模式&#xff09…...

分层多维度应急管理系统的设计

一、系统总体架构设计 1. 六层体系架构 #mermaid-svg-QOXtM1MnbrwUopPb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QOXtM1MnbrwUopPb .error-icon{fill:#552222;}#mermaid-svg-QOXtM1MnbrwUopPb .error-text{f…...

FFmpeg源码:av_base64_decode函数分析

一、引言 Base64&#xff08;基底64&#xff09;是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2 646&#xff0c;所以每6个比特为一个单元&#xff0c;对应某个可打印字符。3个字节相当于24个比特&#xff0c;对应于4个Base64单元&#xff0c;即3个字节可由4个…...

算法随笔_30: 去除重复字母

上一篇:算法随笔_29:最大宽度坡_方法3-CSDN博客 题目描述如下: 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09;。 示例 1&#xff1a; …...

fpga系列 HDL:XILINX Vivado Vitis 高层次综合(HLS) 实现 EBAZ板LED控制(上)

目录 创建工程创建源文件并编写C代码C仿真综合仿真导出RTL CG导出RTL错误处理&#xff1a; 创建工程 创建源文件并编写C代码 创建源文件(Souces下的hlsv.h和hlsv.cpp&#xff0c;Test Bench下的test_hlsv1.cpp)&#xff1a; hlsv1.h #ifndef HLSV1 #define HLSV1 #include &l…...

企业微信SCRM推动企业数字化转型实现高效客户管理与营销效益提升

内容概要 在当今数字化转型的大背景下&#xff0c;企业微信SCRM逐渐成为推动企业高效客户管理和提升营销效益的重要工具。说到SCRM&#xff0c;首先要了解它的定义。SCRM即社交化客户关系管理&#xff0c;通过整合社交媒体与客户管理&#xff0c;帮助企业更好地理解和服务客户…...

C++ 7

vector 底层原理和扩容过程 底层原理 ● vector 是 C 标准库中的一个容器&#xff0c;可以看作是一个动态数组&#xff0c;它的大小可以根据元素的增加而增长。它通过在堆上分配一段连续的内存空间存放元素&#xff0c;支持时间复杂度为 O&#xff08;1 ) 的随机访问。 ● vec…...

论文阅读(七):贝叶斯因果表型网络解释遗传变异和生物学知识

1.论文链接&#xff1a;Bayesian Causal Phenotype Network Incorporating Genetic Variation and Biological Knowledge 摘要&#xff1a; 在分离群体中&#xff0c;数量性状基因座&#xff08;QTL&#xff09;定位可以确定对表型有因果效应的QTL。这些方法的一个共同特点是Q…...

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…...

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

可被electron等调用的Qt截图-录屏工具【源码开放】

1. 工具功能简介&#xff1a; (1)、QT5.15.2截图工具&#xff08;exe&#xff09;可单独使用或嵌入IM&#xff08;嵌入方法参照&#xff1a;https://gitee.com/lykiao/yfscreenshot_release&#xff09; (2)、支持通过Windows消息通知截图成功或取消 (3)、支持圆形、矩形、线条…...

【Python蓝桥杯备赛宝典】

文章目录 一、基础数据结构1.1 链表1.2 队列1.3 栈1.4 二叉树1.5 堆二、基本算法2.1 算法复杂度2.2 尺取法2.3 二分法2.4 三分法2.5 倍增法和ST算法2.6 前缀和与差分2.7 离散化2.8 排序与排列2.9 分治法2.10贪心法1.接水时间最短问题2.糖果数量有限问题3.分发时间最短问题4.采摘…...

.cc扩展名是什么语言?C语言必须用.c为扩展名吗?主流编程语言扩展名?Java为什么不能用全数字的文件名?

.cc扩展名是什么语言? .cc是C语言使用的扩展名&#xff0c;一种说法是它是c with class的简写&#xff0c;当然C语言使用的扩展名不止.cc和.cpp, 还包含.cxx, .c, .C等&#xff0c;这些在不同编译器系统采用的默认设定不同&#xff0c;需要区分使用。当然&#xff0c;编译器提…...

基于 Redis GEO 实现条件分页查询用户附近的场馆列表

&#x1f3af; 本文档详细介绍了如何使用Redis GEO模块实现场馆位置的存储与查询&#xff0c;以支持“附近场馆”搜索功能。首先&#xff0c;通过微信小程序获取用户当前位置&#xff0c;并将该位置信息与场馆的经纬度数据一同存储至Redis中。利用Redis GEO高效的地理空间索引能…...

项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser

文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么&#xff0c;有存就有取 在取值的时候&#xff0c;报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中&#xff1a;LoginUser u…...

Python算法详解:贪心算法

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种通过选择当前最优解以期望达到全局最优解的算法思想。它在每一步选择时只考虑当前状态下的局部最优&#xff0c;而不关心全局问题的复杂性。这种算法简单高效&#xff0c;适用于某些特定问题&#xff0c;尤其是存在贪心…...

5.3.2 软件设计原则

文章目录 抽象模块化信息隐蔽与独立性衡量 软件设计原则&#xff1a;抽象、模块化、信息隐蔽。 抽象 抽象是抽出事物本质的共同特性。过程抽象是指将一个明确定义功能的操作当作单个实体看待。数据抽象是对数据的类型、操作、取值范围进行定义&#xff0c;然后通过这些操作对数…...

sublime_text的快捷键

sublime_text的快捷键 向下复制, 复制光标所在整行并插入到下一行&#xff1a;通过 CtrlShiftD 实现快速复制当前行的功能。 可选多行, 不选则复制当前行 ctrl Shift D 删除当前行&#xff1a;通过 CtrlShiftK 实现快速删除当前行的功能。 可选多行, 不选则删当前行 ctrl S…...

【项目集成Husky】

项目集成Husky 安装初始化 Husky在.husky → pre-commit文件中添加想要执行的命令 安装 使用 Husky 可以帮助你在 Git 钩子中运行脚本&#xff0c;例如在提交代码前运行测试或格式化代码pnpm add --save-dev husky初始化 Husky npx husky init这会在项目根目录下创建一个 .hu…...