自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(278)
  • 收藏
  • 关注

原创 Spine 骨骼动画入门:skeleton 加载 3.8 版本

本文深入解析了Spine骨骼动画在游戏开发中的加载流程和核心类关系,通过乐高/高达拼装比喻帮助理解。主要内容包括: 核心类分层架构: 平台适配层(SpineExtension、TextureLoader):解决跨平台问题 静态数据层(TextureAtlas、SkeletonData):提供素材和规则 桥梁绑定层(AttachmentLoader):关联素材与骨骼 动态实例层(Slot、Skeleton):最终可操作对象 关键加载流程: 1)加载纹理图集(TextureAtlas) 2)解析骨骼数据(Ske

2026-01-31 00:42:04 178

原创 Spine 骨骼动画入门:skeleton 加载 4.2 版本

本文详细介绍了Spine骨骼动画在C++环境下的加载流程,重点解析了核心类的关系和使用方法。文章采用乐高/高达拼装的比喻,将TextureLoader比作快递员,TextureAtlas比作零件收纳盒,SkeletonData比作拼装说明书,AttachmentLoader比作拼装工具,Skeleton比作成品模型,生动形象地解释了Spine的工作原理。 文章详细说明了在QT和VS环境下实现Spine加载的步骤,包括自定义SpineExtension和TextureLoader、加载纹理图集、解析骨骼数据、

2026-01-30 15:03:21 390

原创 脚手架介绍

本文介绍了软件开发中脚手架技术的概念及其应用。在Java开发中,脚手架通过自动化工具生成项目基础结构,类似建筑脚手架,可提高开发效率、统一项目结构并减少错误。文章重点阐述了C++脚手架封装方案,计划整合常用第三方库(如spdlog、gtest、protobuf等)和中间件SDK(如MySQL、Redis、RabbitMQ等),涵盖配置解析、网络通信、日志输出等功能模块。这种封装旨在标准化技术栈、沉淀最佳实践,避免重复开发,提升团队协作效率,体现了工程化思想在不同语言中的实际应用。

2026-01-26 19:46:19 576

原创 C++17 详细特性解析(中)

C++17新特性摘要:1. 折叠表达式简化可变参数模板处理,提供四种语法形式(左/右折叠、带初始值),避免递归展开参数包。2. 类模板参数自动推导(CTAD)根据构造函数实参自动推断模板类型,简化标准库容器实例化。3. 非类型模板参数增强支持auto推导和字面量类类型。4. 嵌套命名空间定义语法简化,支持A::B::C直接声明。5. __has_include预处理指令检查头文件可用性,提升跨平台兼容性。这些特性使代码更简洁高效,增强了模板编程和系统编程能力。

2026-01-26 19:03:05 1180

原创 Spine 骨骼动画入门:环境搭建

摘要:本文系统介绍了2D骨骼动画工具Spine及其在游戏开发中的应用。首先解析Spine的核心优势:采用骨骼绑定技术替代传统逐帧动画,支持FK/IK动力学系统,实现高效流畅的动画制作。其次提出三阶段学习路径:软件基础→C++环境搭建→API实战,并详细演示了Spine试用版安装和C++SDK编译流程(基于MinGW64位环境)。最后给出环境验证代码和常见避坑指南,为后续Spine软件操作与C++API对接学习奠定基础。全文聚焦游戏开发实际需求,强调"软件操作+代码实现"的同步学习策略。

2026-01-25 23:17:19 794

原创 C++17 详细特性解析(上)

C++17主要特性摘要:1. 结构化绑定:简化数组/结构体解包,支持一次性声明多个变量,变量数量需匹配且生命周期与绑定对象相同。2. inline变量:解决头文件变量重复定义问题,允许在多个翻译单元中共享同一变量实例,简化静态成员初始化。3. if/switch初始化语句:支持在条件语句中直接初始化变量,限定变量作用域,提升代码紧凑性和安全性。4. 强制拷贝省略:标准化返回值优化(URVO),确保特定场景下避免临时对象拷贝,提升性能。5. if constexpr:编译期条件判断,仅保留符合条件的代码分支,

2026-01-25 21:39:30 1119

原创 开发 Windows 桌面宠物软件 - 环境搭建与项目构建

本文详细介绍了开发Windows桌面宠物软件的环境搭建和工程初始化步骤。项目采用C++17+Qt6.9.0(MinGW64bit)技术栈,结合Spine4.1骨骼动画引擎实现宠物动效。环境配置包括:1)安装VS2022和Qt6.9.0(必须选择MinGW64bit版本) 2)创建Qt工程并验证编译环境 3)建立标准化目录结构 4)修改.pro配置文件适配MinGW编译 5)完成工程初始化验证。关键点包括:必须使用MinGW64bit版本Qt、自定义目录结构要与.pro文件同级、以及.pro文件中MinGW专

2026-01-22 19:46:49 948

原创 C++14 详细特性解析

本文介绍了C++14标准的主要新特性,包括变量模板、泛型lambda表达式、函数返回类型推导、二进制字面量、数字分隔符等语言特性,以及标准库新增的std::exchange、std::make_unique、std::integer_sequence等实用工具。C++14作为C++11之后的增量更新版本,重点优化了语法表达和缺陷修复,提升了开发效率和代码可读性。文章通过代码示例详细展示了各特性的实际应用场景,帮助开发者更好地理解和使用这些新功能。

2026-01-20 20:14:49 688

原创 C++11 扩展 - 模板元编程

摘要:模板元编程(TMP)是现代C++在编译时进行计算和代码生成的高级技术,通过模板特化、递归实例化和类型操作实现零运行时开销的优化。文章从核心概念、基础语法、类型萃取、SFINAE等方面系统讲解TMP,并介绍C++11/14/17/20对TMP的增强特性,如constexpr函数、变量模板、if constexpr等。TMP具有零运行时开销、类型安全等优点,但也存在编译时间长、学习成本高等缺点。随着C++20引入概念(concepts)和模块(modules),模板元编程正朝着更简洁、更高效的方向发展。

2026-01-16 22:30:05 846

原创 C++11 扩展 - 强枚举类型,静态断言,tuple

摘要:C++11引入的强类型枚举(enum class)解决了传统枚举的隐式转换、作用域污染和底层类型限制问题。static_assert提供了编译时断言机制,增强代码健壮性。std::tuple作为异构值集合,通过变参模板和递归继承实现,支持索引访问和解包。与Python元组相比,C++的tuple具有静态类型、可修改元素等特点,其底层实现依赖变参模板、递归结构和索引序列,所有操作均在编译期完成,保证运行效率。这些特性共同提升了C++的类型安全性和元编程能力。

2026-01-15 21:38:03 897

原创 C++11 扩展 - 处理类型

摘要:C++11引入了auto、decltype、typedef和using等类型处理机制,均为编译时特性。auto用于自动类型推导,会忽略顶层const但保留底层const;decltype则完整保留表达式的类型信息,包括const和引用。typedef和using用于创建类型别名,其中using还支持模板参数化别名。此外,C++11的尾置返回类型语法和C++14的decltype(auto)进一步增强了类型推导能力。这些特性共同提升了代码的可读性和灵活性,同时保持零运行时开销。

2026-01-12 00:40:52 660 2

原创 ProtoBuf - 3

本文详细介绍了Protocol Buffers(protobuf)的语法和使用方法,通过逐步升级通讯录案例演示了各种字段类型的应用。主要内容包括: 基础语法:介绍了字段规则(singular/repeated)、消息类型定义与嵌套使用、枚举类型定义等基础语法。 高级字段类型: Any类型:存储任意消息类型 oneof类型:实现多选一字段 map类型:创建关联映射字段 版本升级实践: 演示了从2.0到2.4版本的逐步升级过程 每个版本新增不同字段类型(repeated、enum、any、oneof、map)

2025-12-20 18:31:49 819

原创 ProtoBuf - 2

Protobuf是Google推出的一种高效的结构化数据序列化方法。它具有语言无关、平台无关、体积小、速度快等特点。使用Protobuf需要先编写.proto文件定义数据结构,然后通过protoc编译器生成对应语言的代码。生成的代码提供了序列化和反序列化方法,开发者只需调用这些方法即可完成数据的转换。相比于XML和JSON,Protobuf采用二进制编码,数据更紧凑且安全性更高。本文通过一个通讯录示例,展示了从定义.proto文件到实现序列化/反序列化的完整流程,包括字段类型、编号规则等关键概念。Proto

2025-12-15 21:48:47 1029

原创 C++11 扩展 - 深入理解 C++ 中的 const 与 constexpr

本文深入解析C++中const和constexpr关键字的核心用法与演进。const分为顶层(指针本身不可改)和底层(指向对象不可改)两种修饰方式。constexpr则用于编译期计算,可修饰变量、函数和类,要求初始化值为常量表达式。文章详细介绍了constexpr函数的限制条件(C++11仅单return语句,C++14放宽至支持局部变量和控制流),以及在类构造函数、成员函数和模板中的应用。同时梳理了C++17引入的if constexpr和constexpr lambda,以及C++20对动态内存分配、标

2025-12-15 21:44:19 877

原创 ProtoBuf - 1 - 下载和环境配置

本文介绍了Protocol Buffers(ProtoBuf)在Windows和Linux系统下的安装方法。Windows安装包括下载编译器、配置环境变量和验证安装三个步骤。Linux安装需要先安装依赖库,然后下载对应版本安装包,通过autogen.sh、configure、make等命令进行编译安装,最后配置环境变量。两种系统安装完成后都可通过"protoc --version"命令验证是否安装成功。文中还提供了make check报错时的解决方法,主要是通过扩大swap分区来解决测试

2025-12-03 22:00:22 1197

原创 从零吃透 JSON Schema 2020-12:C++ 开发者专属实战指南

本文介绍了C++开发者如何利用JSONSchema 2020-12规范进行高效JSON数据校验。文章首先阐述了JSONSchema的核心价值,即通过标准化定义JSON数据结构和约束条件,避免手写冗余校验代码。随后详细解析了2020-12版本的核心语法,包括数据类型约束、对象/数组校验、数值/字符串限制等关键特性,并提供了C++实战示例,展示如何使用nlohmann/json-schema-validator库实现数据校验。文章还涵盖了高级特性如条件校验、Schema复用,以及从旧版本迁移的注意事项,为C++

2025-11-21 16:10:29 1082 1

原创 从零搭建 C++ 在线五子棋对战项目:从环境到上线,全流程保姆级教程

本文介绍了一个基于C++的在线五子棋对战系统的开发过程。主要内容包括: 项目概述:实现用户管理、匹配对战和实时聊天三大核心功能,采用C++后端+前端+MySQL的技术架构。 开发环境搭建:详细说明了CentOS和Ubuntu系统下的环境配置步骤,包括安装gcc、MySQL、WebSocketpp等必需组件。 关键技术实现: 使用WebSocketpp实现实时对战通信 通过JsonCpp处理前后端数据交互 利用MySQL C API存储用户信息 实现了房间管理、匹配算法和游戏逻辑 客户端开发:提供了登录页面和

2025-11-05 23:28:54 1120

原创 【C++ 硬核干货】IO 库完全解析:从底层原理到实战应用(万字图文详解)

基础层由ios_base和basic_iosios_base:最顶层基类,不依赖模板参数,负责:定义流状态标志(goodbiteofbitfailbitbadbit定义文件打开模式(inoutapp等)提供流格式控制(如hex:模板类,继承自ios_base,负责:管理流的缓冲区(streambuf对象)提供流状态检查函数(good()eof()fail()bad()提供流状态重置函数(clear()setstate()CharT是字符类型(默认char),Traits。

2025-10-27 15:34:54 953

原创 贪心 - 后篇

本文总结了LeetCode中多个贪心算法相关问题的解法,包括: 单调递增数字(738题):通过字符串处理找到递减点,调整数字使其单调递增。 坏计算器(991题):逆向思维处理,通过除法和加法操作反向逼近目标值。 合并区间(56题):排序后连续合并重叠区间,利用并集思想处理。 无重叠区间(435题):排序后移除右端点较大的重叠区间。 引爆气球(452题):排序后求交集,用最少数量的箭引爆连续重叠气球。 整数替换(397题):根据奇偶性选择最优操作策略。 俄罗斯套娃(354题):转化为最长上升子序列问题,用动态

2025-10-26 23:07:18 875

原创 Git 从入门到精通:手把手教你掌握企业级 Git 操作与原理(超细节干货版)

Git是一款强大的分布式版本控制系统,能有效解决文件版本管理问题。本文详细介绍了Git的安装配置、核心概念(工作区、暂存区、版本库)、基础操作(创建仓库、提交代码、查看历史)、进阶操作(版本回退、撤销修改、删除文件)以及分支管理。重点讲解了多人协作的远程仓库操作,包括克隆、推送、拉取代码,并提供了团队协作的实战场景。文章还介绍了标签管理和.gitignore文件配置,最后总结了Git的核心工作流程。通过清晰的步骤说明和实用技巧,帮助读者从零基础快速掌握Git的使用方法。

2025-10-25 16:55:22 1033

原创 贪心 --- 中篇

本文总结了力扣平台上10道贪心算法相关的题目解法,涵盖数组处理、排序优化、博弈论应用等场景。主要内容包括:1)K次取反数组和最大化问题,通过分情况讨论负数处理;2)田忌赛马策略在优势洗牌问题中的应用;3)回文串构造的最优字符选择方法;4)跳跃游戏的最小步数计算和可行性判断;5)加油站问题的贪心优化解法。这些题目展示了如何通过局部最优决策实现全局最优解,涉及排序、索引映射、动态规划等技巧,为处理类似问题提供了典型思路。

2025-10-24 20:03:25 704

原创 贪心 --- 前篇

贪心算法是一种在每一步选择局部最优解以期望获得全局最优解的算法策略。其核心在于通过一系列局部最优选择构建全局解,适用于具有贪心选择性质和最优子结构的问题。该算法实现简单、效率高,但可能陷入局部最优,需严格验证问题适配性。典型应用包括活动选择、哈夫曼编码、最短路径等。文章通过力扣题目(如柠檬水找零、最大数等)展示了贪心策略的具体实现方法,并分析了不同场景下的解题思路和代码示例。

2025-10-22 19:41:58 718

原创 记忆化搜索

记忆化搜索是一种结合递归与动态规划的算法优化技术,通过缓存子问题的解来避免重复计算,从而显著降低时间复杂度。其核心适用场景包括:具有递归定义和子问题重叠的问题(如斐波那契数列)、区间DP类问题(如矩阵链乘法)、状态转移复杂的问题(如背包变种)、路径/网格问题(如不同路径)、组合计数问题(如零钱兑换)以及博弈问题(如石子游戏)。典型实现步骤为:定义递归函数→添加备忘录缓存→递归前检查缓存→返回前存储结果。通过力扣例题(如509、62、300、375、329题)的解法演变,展示了从暴力搜索到记忆化搜索再到动态规

2025-10-20 17:09:37 1067

原创 floodfill 算法(dfs)

FloodFill(洪水填充)算法是一种区域填充算法,通过深度优先搜索(DFS)实现。其核心是从起始点出发,将与起始点连通且满足相同条件(如颜色、数值相同)的所有像素/单元格替换为目标值。算法通过递归探索上下左右(4连通)或包括斜向的8个方向(8连通),直到边界或不满足条件的点。关键点包括:边界检查、填充标记避免重复递归、以及递归终止条件。该算法广泛应用于图像编辑(如油漆桶工具)、游戏开发(扫雷、迷宫)和矩阵处理(标记连通区域)等场景。文中还提供了多个力扣(LeetCode)相关题目的DFS解法示例。

2025-10-19 18:14:55 1072

原创 dfs 综合练习 -- 2

本文总结了LeetCode中多个回溯算法相关题目的解法,包括优美的排列、N皇后、数独问题和路径搜索问题。这些题目都采用了深度优先搜索(DFS)的回溯算法框架,通过递归枚举所有可能情况,并在过程中使用标记数组避免重复访问。解题关键在于设计递归函数,明确终止条件、递归参数和回溯操作。对于不同问题,需要根据具体条件调整搜索策略,如N皇后问题的对角线检查、数独问题的九宫格约束等。回溯算法通过系统性地枚举所有可能性,确保找到所有可行解或最优解,是解决组合优化问题的有效方法。

2025-10-18 19:18:07 735

原创 dfs 综合练习

本文总结了力扣(LeetCode)上五个回溯算法经典题目的解法: 括号生成:通过递归控制左右括号数量,确保左括号数始终≥右括号数且总数相等。 组合问题:选择数字时保持递增顺序避免重复,当组合达到k个元素时记录结果。 目标和:两种选择(加减)递归搜索,可通过数学转化优化为子集和问题。 组合总和:允许重复选数,递归时保持索引不变实现重复选择。 字母大小写全排列:对每个字母进行三种处理(保持原样、转大写、转小写)。 这些题目都采用回溯框架:递归尝试所有可能选择,满足条件时记录结果,通过剪枝优化效率。解题关键在于定

2025-10-16 16:26:50 963

原创 从零开始:用 C 语言连接 MySQL 全流程详解(含踩坑指南 + 完整代码)

本文详细介绍了使用C语言连接和操作MySQL数据库的完整流程。主要内容包括:1. 环境搭建:通过MySQL Connector/C库实现连接,介绍Linux和Windows系统的配置方法;2. 核心API使用:详细讲解mysql_init、mysql_real_connect等6个关键函数的调用方式;3. 完整示例:提供查询、插入数据的代码实现,包含结果集处理和内存管理;4. 高级功能:介绍事务控制、字符集设置等进阶操作;5. 常见问题:分析连接失败、中文乱码等典型问题的解决方案。文章通过分步骤讲解和完整代

2025-10-15 20:44:40 1105

原创 穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝

摘要:回溯算法是一种通过递归遍历状态树来解决问题的通用方法,适用于组合、排列、子集等问题。其核心是"试错"思想:做出选择后继续搜索,若失败则回退并尝试其他选择。典型应用包括全排列(LeetCode 46)、子集生成(LeetCode 78)、电话号码字母组合(LeetCode 17)等。算法模板包含选择、递归、撤销选择三个关键步骤,通过剪枝(如LeetCode 47的去重处理)可优化效率。实践时需重点理解决策树构建逻辑,而非生搬硬套模板。不同变体如异或和计算(LeetCode 1863)

2025-10-15 19:01:42 1056

原创 二叉树的深搜

二叉树深度优先遍历(DFS)包括前序、中序和后序遍历,适用于处理节点关系、结构判断、路径搜索等问题。DFS通过递归深入子树再回溯,能高效解决四类问题:1)全节点遍历与信息收集;2)树结构与属性判断;3)路径搜索与目标查找;4)树的修改与构造。典型题目如计算布尔树值(后序遍历)、求根到叶数字和(前序遍历)、剪枝(后序遍历)、验证BST(中序遍历)等。DFS的优势在于递归实现简洁,能自然处理节点间依赖关系。

2025-10-13 19:54:19 664

原创 算法 - 递归

递归算法适用于能分解为结构相似子问题的情况,主要应用场景包括树形结构遍历、分治算法(如归并排序)、回溯问题(如八皇后)、动态规划基础问题(如斐波那契数列)以及递归定义的数据结构处理(如链表反转)。递归解题需满足三个条件:问题可分解为相同结构的子问题、子问题可通过递归解决、存在明确的终止条件。典型例题包括汉诺塔问题(通过分解n层问题为n-1层子问题)、合并有序链表(比较头节点后递归处理剩余部分)、快速幂运算(通过二分降次优化计算)等。递归的关键在于明确函数定义、处理逻辑和终止条件,链表类题目尤其需要注意指针操

2025-10-11 19:55:30 760

原创 动态规划 - 二维费用的背包问题、似包非包、卡特兰数

本文总结了识别背包问题的关键特征与解题思路。核心识别点包括:资源约束(容量、重量等)、选择目标(最大价值等)和物品属性(选择次数限制)。二维费用背包问题会出现双重资源约束,而"似包非包"问题则隐藏在选择累积效应中。文章提供了力扣474题(二维背包)、879题(利润计划)、377题(组合总和)和96题(二叉搜索树)的详细解法,涵盖状态表示、转移方程、初始化和空间优化策略。关键在于将问题转化为"有限资源下的选择优化"模型,通过定义背包容量、物品和价值来构建动态规划解决方案

2025-10-10 23:35:33 824

原创 动态规划 - 完全背包

完全背包问题是一种动态规划算法,用于解决物品无限供应的组合优化问题。与0-1背包不同,完全背包允许物品重复选取,因此内层循环采用正序遍历。典型应用包括:求最大价值(如牛客网模板题)、最少物品数(如322.零钱兑换)和组合数(如518.零钱兑换II)。算法通过状态转移方程dp[i][j]=max(dp[i-1][j],dp[i][j-v[i]]+w[i])实现,并可通过滚动数组优化空间复杂度至O(n)。判断是否为完全背包问题的关键是:物品是否无限供应且选取顺序不影响结果。

2025-10-08 13:23:11 768

原创 动态规划 - 背包问题

摘要: 背包问题是一类经典的组合优化问题,核心目标是在限定总重量内选择物品使总价值最大。根据物品选取方式可分为01背包(每件选一次)、完全背包(无限选取)、多重背包(有限选取)等变种;根据约束条件可分为普通背包和二维费用背包;根据求解目标可分为最优解、方案数等问题。动态规划是主要解法,通过状态转移方程(如01背包的dp[i][j] = max(dp[i-1][j], dp[i-1][j-v[i]]+w[i]))实现,可通过滚动数组优化空间。典型例题包括分割等和子集(LeetCode 416)、目标和(Lee

2025-10-07 17:15:24 1389 1

原创 动态规划 - 两个数组的 dp 问题

本文系统介绍了基于两个数组的动态规划问题解法。核心思想是将问题分解为重叠子问题,通过dp数组存储子问题解。典型应用包括:最长公共子序列(LCS)、编辑距离、字符串交织等。文章详细分析了LCS问题的状态定义(dp[i][j]表示两数组前i/j元素的最优解)和状态转移方程(分字符相等/不等情况)。针对不同变种问题(如不相交线、不同子序列等),展示了如何调整状态转移逻辑。特别强调了空串处理、初始化技巧和填表顺序的重要性,并提供了多个LeetCode例题的代码实现,包括状态转移优化方法。最后指出这类问题的通用解法框

2025-10-07 00:34:53 753 1

原创 超详细 Redis C++ 实战指南:从环境搭建到集群操作(附完整代码与测试结果)

本文介绍了如何使用C++操作Redis数据库,重点介绍了redis-plus-plus库的使用方法。主要内容包括: 环境搭建:安装hiredis依赖库和redis-plus-plus库的详细步骤,包括Ubuntu和CentOS系统的配置差异。 核心数据结构操作:详细讲解了字符串、列表、集合、哈希和有序集合等Redis数据结构的C++实现方式,包含完整的代码示例和测试结果。 Redis集群访问:介绍了如何使用RedisCluster类连接和操作Redis集群。 常见问题解决方案:提供了编译和连接错误的排查方法

2025-10-06 18:36:01 1208 1

原创 从 C 到 C++:彻底吃透类型转换,从原理到实战全解析

本文系统讲解了C和C++中的类型转换机制。C语言的类型转换分为隐式和显式两种,简洁但风险高;C++在此基础上进行了安全升级,支持自定义类型转换,并引入四种命名显式转换(static_cast、reinterpret_cast、const_cast、dynamic_cast)以明确转换意图。文章详细分析了每种转换的适用场景、风险点和最佳实践,特别强调了多态环境下使用dynamic_cast进行安全向下转型的重要性。同时介绍了RTTI机制及其在运行时类型识别中的应用。最后给出了类型转换的最佳实践建议:优先使用C

2025-10-05 20:33:28 1121 1

原创 动态规划 - 回文子串问题

本文介绍了利用动态规划解决回文子串问题的核心思路和典型应用场景。通过构建二维DP表存储子串回文信息,可将O(n³)的暴力解法优化至O(n²)。文章详细分析了五类典型问题:统计回文子串数、寻找最长回文子串、分割回文串、最长回文子序列和构造回文串的最小操作次数,并给出了相应的状态转移方程和LeetCode解题代码。关键在于识别"大回文串去掉两头仍为回文"的重叠子问题特性,通过预处理回文信息实现高效查询。

2025-10-05 19:41:16 1110

原创 动态规划 - 子序列问题

本文总结了动态规划在子序列问题中的应用,重点分析了最长递增子序列(LIS)、最长公共子序列(LCS)、编辑距离等典型问题的解法。核心思路是通过定义dp数组存储中间结果,避免重复计算,逐步构建最优解。文章详细介绍了状态表示、状态转移方程、初始化、填表顺序和返回值等关键步骤,并提供了多个力扣题目的具体解法代码,包括最长递增子序列、摆动序列、最长斐波那契子序列等。这些解法都遵循动态规划的基本框架,通过合理定义状态和转移方程,在O(n²)或O(n*m)时间复杂度内求解问题。

2025-10-03 18:40:05 962

原创 动态规划 - 子数组系列

文章摘要:动态规划在子数组问题中的应用主要针对寻找具有特定性质的连续子数组(如最大和、最长长度等)。典型解法包括:1)最大子数组和(dp[i]记录以i结尾的最大和);2)乘积最大子数组(需同时维护最大/最小乘积dp表);3)环形子数组(分内部和首尾相连两种情况处理);4)湍流子数组(用两个dp表分别记录上升/下降状态)。关键思路是定义dp[i]为以第i个元素结尾的子数组最优解,通过状态转移方程逐步求解。不同问题需结合正负号、环形结构等特性调整状态表示和转移逻辑,最后注意去重和边界处理。

2025-10-01 12:48:09 614

原创 动态规划 - 简单多状态 dp 问题

摘要:本文系统介绍了简单多状态动态规划(DP)问题及其解法。这类问题的特点是每个阶段存在有限个状态(通常2-4个),状态间转换规则明确。文章通过打家劫舍、股票买卖、粉刷房子等经典例题,详细阐述了多状态DP的三要素:最优子结构、重叠子问题和有限状态集合。针对不同问题,给出了状态定义、转移方程、初始化和填表顺序的具体方法。特别强调了如何将环形问题转化为线性问题处理,以及交易次数限制下的状态设计技巧。最后提供了力扣相关题目的代码实现,展示了多状态DP的通用解题框架。

2025-09-30 01:30:17 992 1

C++面试宝典完整版最最最新.pdf

C++面试宝典完整版最最最新.pdf

2025-05-19

包含了多个关于C++编程概念和特性的图像文件,具体内容涵盖了排序算法、内存管理、迭代器使用、拷贝构造函数等多个方面,会更新,放心

本资源集合包含了多个关于C++编程概念和特性的图像文件,具体内容涵盖了排序算法、内存管理、迭代器使用、拷贝构造函数等多个方面。以下是对每项资源的简要描述: 1. Hoare Sort (hoareSort.png): 描述了霍耳排序算法的图解,展示了递归思想在排序中的应用。 2. New and Delete (new-delete.png): 展示了带有和不带有析构函数的类在内存管理上的差异,以及编译器优化的影响。 3. C++98 Swap (C++98_swap.png): 展示了C++98标准下`std::swap`函数模板的行为,包括内存空间的交换和深拷贝与浅拷贝的概念。 4. Reverse Iterator (reverse_iterator.png): 解释了反向迭代器的概念,以及它如何指向字符串的最后一个有效字符的前一个位置。 5. Shell Sort (Shell_Sort.png): 展示了希尔排序的分组和预排序结果,说明了排序过程中的gap变化。 6. String Iterator (string_iterator.png): 等等

2024-08-23

STL中string,vector,list,queue,stack....等原码

1. 资源来源:STL 2. 资源类型: 源码:提供STL的原始代码,允许用户查看和修改STL的内部实现 3. 资源内容:描述资源覆盖的主题和内容,例如容器、迭代器、算法、函数对象、适配器等。 4. 资源适用性: 进阶学习者:适合已经有一定基础,希望深入理解STL的用户 5. 资源形式:在线文档 6.资源语言:英语

2024-08-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除