- 博客(35)
- 收藏
- 关注
原创 【C++题解】动态规划-背包问题
本文系统讲解动态规划中的背包问题,重点解析0-1背包和完全背包的核心概念与实现差异。0-1背包要求物品最多选一次(容量逆序遍历),而完全背包允许无限次选择(正序遍历)。通过采药、包邮等典型例题,展示如何将实际问题抽象为背包模型,包括状态定义、转移方程和空间优化技巧。文章强调通过对比两种背包问题的循环顺序差异,帮助读者理解其本质区别,并提供分组背包等变种问题的解题思路。最后建议通过自查来检验对背包问题核心概念的理解程度。
2025-09-10 22:44:32
1048
原创 4小时攻克动态规划:背包问题全解析
这是最纯粹的0-1背包问题。* 理解正序遍历:在完全背包的一维优化中,对容量 j 的正序遍历,使得我们在计算 dp[j] 时,所依赖的 dp[j - weight[i]] 可能已经是本轮(即已考虑物品 i)更新过的状态。* 理解逆序遍历:在一维优化中,对容量 j 的逆序遍历是为了保证在计算 dp[j] 时,所依赖的 dp[j - weight[i]] 还是上一轮(即不包含物品 i)的状态。对于每个物品,决策是“选”还是“不选”(0-1背包),或者是“选0件、1件、2件...”(完全背包/多重背包)。
2025-09-09 16:21:16
503
原创 动态规划-学习笔记
本文是一份动态规划(DP)系统学习笔记,从一星到五星难度递进讲解。核心部分阐述了DP的最优子结构和重叠子问题两大特征,强调解题五步法:定义dp数组、建立状态转移方程、初始化、确定遍历顺序和推导最终解。入门级例题包括斐波那契数列(爬楼梯)和打家劫舍问题,展示一维DP的应用。进阶部分引入二维DP,以不同路径和0-1背包问题为例,详细分析状态转移过程。笔记特别强调背包问题的空间优化技巧,提供完整C++代码实现。全文采用"理论+实例"的教学模式,帮助读者循序渐进掌握动态规划的核心思想与解题方法论
2025-09-08 23:08:34
2005
原创 【C++题解】DP入门-LIS&LCS
本文介绍了一个4小时的动态规划(DP)入门练习计划,重点学习两个经典线性DP模型:最长递增子序列(LIS)和最长公共子序列(LCS)。第一部分通过LeetCode 300和Luogu P1091练习一维DP问题,掌握状态定义和转移方程的构建;第二部分通过LeetCode 1143和72题学习二维DP问题,理解双序列问题的处理方式。计划强调动手推导、理解状态定义,并提供代码示例和练习建议,帮助建立DP系统性思维模式。
2025-09-07 23:50:38
1907
原创 【C++题解】DFS和BFS
DFS与BFS算法4小时训练计划摘要 本计划通过经典题目系统训练DFS和BFS算法。DFS部分(1.5小时)重点掌握回溯模板,通过全排列(LeetCode 46)练习基础回溯,N皇后(LeetCode 51)学习剪枝优化。BFS部分(2小时)侧重层次遍历,二叉树层序遍历(LeetCode 102)建立基础,岛屿数量(LeetCode 200)实践矩阵搜索,单词接龙(LeetCode 127)训练状态转换。最后0.5小时对比两种算法:DFS适合找所有解(如排列组合),BFS适合最优解(如最短路径)。练习时需注
2025-09-06 21:28:47
1122
2
原创 【C++题解】贪心和模拟
这篇文章介绍了一个4小时的编码练习计划,重点训练贪心算法和复杂模拟题。计划分为两部分:1.5小时学习贪心算法,包括经典活动选择问题和资源分配问题;2小时挑战复杂模拟题,如数据解压缩或查询解析,锻炼代码实现能力。提供的C++代码示例展示了贪心算法在区间调度和资源分配中的具体应用,并强调了对题目规则的理解和耐心调试的重要性。该计划旨在提升算法思维、代码组织能力和调试技巧。
2025-09-05 22:55:22
786
原创 【C++题解】关联容器
本文介绍了C++ STL中关联容器set/map及其变种的应用。主要内容包括:1) set和map的基本特性,set用于存储唯一元素,map用于键值对映射;2) 对应的multi版本允许重复元素;3) 无序版本unordered_set/map基于哈希表实现。文章通过CCF真题展示了这些容器的实际应用,如词频统计(202403-1)、重复局面检测(202305-1)、稀疏向量计算(202006-2)和质因数分解(202312-2)。配套代码示例演示了如何利用这些容器高效解决问题。建议读者先理解原理再通过练习
2025-09-04 20:30:01
1286
1
原创 【C++题解】栈与队列
4小时编码练习计划聚焦于栈与队列的核心应用,特别是单调栈和单调队列的高级用法。计划分为两部分:前2小时练习基础栈操作(如括号匹配和表达式求值)及单调栈应用(如寻找边界元素和计算最大矩形面积);后2小时学习队列和单调队列,解决滑动窗口最值问题。通过8道精选题目,帮助掌握这些数据结构的特性和实际应用场景,提升算法解题能力。配套代码示例和流程图详细展示了实现逻辑,适合系统化学习栈与队列的经典算法。
2025-09-04 10:52:19
1305
原创 【C++容器】priority_queue使用与底层实现
本文介绍了C++中的优先级队列std::priority_queue,它是一种按照元素优先级出队的容器适配器。文章首先说明了其与栈和队列的区别,指出优先级队列基于堆结构实现,总是让最高优先级元素最先出队。 主要内容包括: 基础用法:展示如何声明、初始化和使用priority_queue的核心成员函数(push、pop、top等) 底层实现:解释其默认使用vector作为底层容器,通过堆结构维护元素优先级 自定义优先级:详细说明如何通过比较函数控制元素优先级,包括创建小顶堆和使用自定义类型 文章提供了多个代码
2025-09-03 00:19:08
1143
原创 【C++容器】queue使用与底层实现
本文介绍了C++标准库中的std::queue容器,作为实现先进先出(FIFO)的容器适配器。文章首先展示了queue的基本语法,包括包含头文件、声明初始化以及核心成员函数push()、pop()、front()、back()等的使用示例。重点对比了queue与stack的操作差异,强调访问和移除元素的两步操作流程。在底层实现方面,详细解释了queue默认采用std::deque作为底层容器的原因,指出vector因缺乏高效pop_front()而不适合,而deque和list都能满足要求。最后提供了完整的
2025-09-03 00:14:46
991
原创 【C++题解】排序和二分
这篇练习计划旨在帮助熟练掌握C++中的排序和二分查找算法,主要包括以下内容: 排序预处理练习(约1.5-2小时): P1093奖学金:多关键字排序与自定义比较函数 P1059明明的随机数:排序与去重 P1012拼数:贪心与自定义比较规则 P1223排队接水:排序作为贪心策略基础 经典二分查找练习(约2-2.5小时): P2249查找:含重复元素的有序数组查找 P1102 A-B数对:排序+二分组合 P1678烦恼的高考志愿:查找最接近元素 P1873砍树:二分答案思想 配套题解展示了各种算法的具体实现,包括
2025-09-02 20:58:03
1080
1
原创 【C++算法】排序与二分的函数使用教程
C++标准库中的sort函数提供高效的O(NlogN)排序,支持自定义比较规则,适用于基本类型和自定义结构体。二分查找函数lower_bound、upper_bound、binary_search和equal_range要求输入区间有序,时间复杂度均为O(logN)。lower_bound查找首个不小于给定值的元素,upper_bound查找首个大于给定值的元素。这些函数位于<algorithm>头文件中,是处理有序数据的重要工具。
2025-09-02 20:52:47
929
1
原创 【C++容器】stack使用与底层实现
本文介绍了C++ STL中的std::stack容器适配器,它实现了后进先出(LIFO)的数据结构。文章首先讲解了基本用法,包括声明初始化、核心成员函数(push、pop、top等)及代码示例。重点剖析了std::stack作为容器适配器的特性,它默认使用std::deque作为底层容器,并分析了选择deque而非vector或list的原因:deque兼具内存连续性和动态扩展性,避免了vector的重新分配问题和list的内存碎片问题。最后通过操作与底层容器方法的对应关系,揭示了std::stack的实现
2025-09-01 20:05:19
1262
原创 湖南大学HNU校园网系统Mac登陆指南
湖大校园网Mac无法登录问题解决方案:通过系统设置-网络-位置,添加"校园网"新位置即可自动跳出登录页面。需注意关闭代理/加速器,Windows用户可尝试修改DNS为114.114.114.114。该方法解决了Mac无法弹出登录窗口及DNS解析失败的问题。
2025-09-01 17:57:13
1057
原创 【C++容器】unordered_map与unordered_multimap使用全览
本文详细介绍了C++ STL中的无序关联容器unordered_map和unordered_multimap。它们基于哈希表实现,具有O(1)的平均操作复杂度,但元素无序存储。unordered_map要求键唯一,支持operator[]快速访问;而unordered_multimap允许键重复,不支持直接索引访问。文章通过代码示例展示了两种容器的创建、插入、访问、查找和删除等基本操作,并重点比较了它们的特性和使用场景,为开发者选择合适的数据结构提供了参考。
2025-08-31 18:51:46
1358
原创 【C++容器】unordered_set与unordered_multiset使用全览
本文详细介绍了C++ STL中的无序关联容器unordered_set和unordered_multiset。它们基于哈希表实现,具有O(1)的平均时间复杂度,但不保证元素顺序。主要区别在于unordered_set存储唯一元素,而unordered_multiset允许重复。文章涵盖了核心概念、哈希表原理、常用操作(插入、查找、删除等)以及特有功能(桶接口、负载因子控制)。通过示例代码展示了基础用法,并对比了两种容器的差异。这些容器适合需要快速查找而不关心顺序的场景,是传统有序关联容器的性能优化替代方案。
2025-08-31 18:46:30
1315
原创 【C++容器】map和multimap使用全览
本文介绍了C++ STL中的map和multimap容器,它们是基于红黑树实现的关联容器,用于存储键值对。主要区别在于map要求键唯一,而multimap允许键重复。文章详细讲解了map的特性、构造函数、元素访问、迭代器、修改器和查找操作,并提供了示例代码展示其用法,包括插入、修改、删除和安全访问元素等操作。map作为有序字典,适合需要快速查找和修改键值对的场景。
2025-08-30 15:00:23
2119
原创 【C++ STL容器】set与multiset使用全览
本文介绍了C++ STL中的关联容器set和multiset。它们基于红黑树实现,具有自动排序、对数时间复杂度等特点。set要求元素唯一,multiset允许重复元素。文章详细讲解了set的构造方法、迭代器、容量查询、增删改查等操作,并提供了示例代码演示基本用法。对于需要有序存储且快速查找的场景,set和multiset是高效的选择。更多C++语法知识可参考相关专栏。
2025-08-30 14:18:43
1231
原创 【C++容器】forward_list使用全览
本文介绍了C++11引入的std::forward_list单向链表容器,对比std::list进行了功能解析。重点包括:1)构造函数与初始化方式;2)仅支持前向迭代器,无反向遍历功能;3)不提供size()方法以节省内存;4)特有的_after后缀修改器操作;5)适用于对内存占用有极致要求的场景。文中通过代码示例展示了插入、删除等核心操作,并强调该容器在功能上的取舍——牺牲便捷性换取更高内存效率,建议仅在性能分析显示std::list内存开销成为瓶颈时使用。
2025-08-29 11:22:54
871
原创 【C++容器】deque使用全览
本文是C++ STL容器系列文章的第四篇,重点介绍双端队列std::deque。文章从六个方面详细解析了deque的特性:1) 7种构造函数用法;2) 随机访问迭代器支持;3) 容量管理特点(无capacity/reserve);4) 元素访问方式(含边界检查);5) 核心修改操作(两端高效操作,中间操作效率低);6) 非成员函数。通过示例代码展示了deque结合vector和list优点的独特设计,特别适合需要频繁在序列两端操作元素的场景。
2025-08-29 11:08:25
1173
原创 【C++容器】list使用全览
本文是C++ STL容器系列文章的list特辑,详细介绍了std::list双向链表的核心特性。重点包括:1)多种构造方式(默认构造、拷贝构造、移动构造等);2)双向迭代器的使用;3)特有的链表操作(O(1)时间复杂度的插入/删除、拼接、合并、反转等);4)与vector的对比,强调list在频繁插入删除时的性能优势。文章还提供了丰富的代码示例,帮助理解list的典型用法,如头尾操作、迭代器遍历和特有成员函数调用等。
2025-08-29 10:55:10
822
原创 【C++容器】array使用全览
本文介绍了C++11标准库中的std::array容器,它封装了固定大小的C风格数组,提供了更安全便捷的访问方式。主要特性包括:1)聚合初始化方式;2)支持迭代器遍历;3)固定大小,不可动态调整;4)提供多种元素访问方法(operator[]、at()等);5)有限修改器(fill、swap);6)支持非成员函数操作(比较、std::get等)。与vector不同,array的大小在编译时确定,性能接近原生数组,同时具备STL容器的安全性和便利性。文章通过代码示例详细演示了各种操作的使用方法。
2025-08-28 21:39:56
1226
原创 【C++容器】Vector使用全览
本文概述了C++中vector容器的核心功能,包括构造函数、迭代器、容量管理、元素访问和修改器。vector是动态数组,支持高效随机访问和尾部操作。关键特性包括多种初始化方式(如初始化列表)、迭代器遍历、容量控制(reserve/resize)、元素访问(at/operator[])以及修改操作(push_back/insert)。文章提供了详细的代码示例,展示了如何创建vector、管理内存、访问元素和修改内容,帮助开发者高效使用这一基础数据结构。特别强调了C++11引入的移动语义和初始化列表等现代特性。
2025-08-28 21:23:03
822
原创 C++所有11种数据结构概览
本文全面梳理了C++ STL中的主要数据结构,分为顺序容器、关联容器、无序关联容器和容器适配器四类。重点介绍了vector(动态数组)、list(双向链表)、map(键值对集合)等常用结构,包括底层实现、时间复杂度、使用场景和代码示例。vector适合快速随机访问和尾部操作,list适合频繁插入删除,map基于红黑树实现自动排序和快速查找。掌握这些数据结构的特点和适用场景,能帮助开发者根据需求选择最合适的容器,提高代码效率。
2025-08-28 18:22:49
1287
原创 C++函数核心语法大全
本文系统梳理了C++函数的核心内容: 函数声明与定义的基本语法; 参数传递机制(值传递、引用传递、常量引用传递和指针传递); 返回值类型与返回方式; 高级特性包括默认参数、函数重载、函数模板、内联函数等; 现代C++特性如constexpr函数、Lambda表达式等; 函数指针的概念与使用。涵盖了从基础语法到高级特性的完整内容,为C++函数编程提供了全面参考。
2025-08-27 13:14:14
1032
原创 C++判断语句语法合集
本文介绍了C++中的条件判断结构,包括if语句(单一if、if-else、if-else if-else)、switch语句和三元运算符。if语句用于基于布尔条件执行不同代码块;switch适用于基于整型变量的不同值执行不同操作,需注意break的使用;三元运算符是简洁的条件表达式。C++17新增了带初始化的if和switch,可限制变量作用域。每种结构都配有典型示例,展示了分数判断、星期输出等常见应用场景。
2025-08-27 13:11:51
515
原创 C++循环语句语法合集
本文介绍了C++中的四种循环结构及其应用场景:1) for循环适用于循环次数已知的情况,通过初始化、条件和迭代表达式精确控制;2) 基于范围的for循环(C++11)用于遍历容器元素,无需索引;3) while循环在循环次数未知但条件明确时使用;4) do-while循环至少执行一次,适合先执行后判断的场景。此外还介绍了break和continue控制语句,用于提前终止循环或跳过当前迭代。每种循环都配有示例代码,展示了不同循环结构的典型用法和区别。
2025-08-27 13:08:57
612
原创 C++所有运算符整理
C++运算符详解:本文全面介绍了C++中的各类运算符,包括算术、赋值、比较、逻辑、位运算等基本运算符,以及递增/递减、成员访问、类型转换等特殊运算符。重点讲解了运算符的优先级和结合性概念,并详细说明了每种运算符的功能、使用场景和注意事项。文章采用分类表格形式呈现,便于快速查阅,同时针对C++20新增的三向比较运算符等新特性也进行了说明。特别强调了逻辑运算符的短路求值特性、前置/后置递增运算符的区别以及C++风格的类型转换运算符等关键知识点。
2025-08-27 12:55:11
849
原创 C++知识块整合:修饰符详细功能表
这类修饰符决定了变量/函数的生命周期(存在多久)和链接性(在哪些地方可见)。这类修饰符用于限定类型的属性,影响变量的可修改性与编译器的优化行为。这类修饰符用于修改函数或类的行为、属性和编译期检查。
2025-08-27 12:52:58
1067
原创 C++所有变量类型和初始化赋值
C++变量初始化与类型摘要 C++提供了多种变量初始化方式,包括C风格(=)、函数风格(())和推荐的列表初始化({})。列表初始化最安全,能防止类型收窄转换,适用于基本类型、数组、STL容器等。C++11新增了auto类型推导、nullptr空指针等特性。变量类型包括布尔型、字符型、整型、浮点型等,各有不同大小和取值范围。定义变量时应立即初始化,可使用const或constexpr定义常量。赋值运算符(=)用于修改变量值。
2025-08-27 12:49:44
712
原创 C++笔记之指针
C++指针是直接操作内存地址的强大工具,核心概念包括指针声明、初始化和解引用操作。指针与数组紧密关联,数组名可视为指向首元素的指针,支持指针算术运算。const关键字可修饰指针,产生指向常量、常量指针或双重限制的效果。指针作为函数参数可实现传址调用,但需注意不要返回局部变量的指针以避免悬挂指针问题。正确使用指针能实现高效算法和数据结构,但需谨慎管理内存。
2025-08-27 11:58:22
967
原创 C++STL中String全部核心用法—处理字符串必备
std::string 是 C++ 标准库中用于处理字符串的类,提供丰富的字符串操作功能。本文介绍了其基本语法,包括头文件引入、多种构造方法(默认构造、拷贝构造、子串初始化等)、容量管理(size(), reserve(), shrink_to_fit()等)、元素访问([], at(), c_str()等)以及迭代器遍历(begin(), rbegin()等)。std::string 支持动态内存管理,可安全高效地处理字符串操作,是 C++ 中字符串处理的核心工具。
2025-08-26 23:35:25
736
1
原创 C++(二)函数和变量(下)之C++中的三种数组
本文介绍了C++中的数组和常用STL容器,主要包括C风格数组、std::array和std::vector。C风格数组是基础但存在安全隐患,std::array是固定大小的安全封装,而std::vector是动态数组的首选。文章详细讲解了它们的声明、初始化、访问方式及特性对比,建议优先使用std::vector和std::array替代C风格数组,以提高代码安全性和可维护性。
2025-08-26 19:53:32
877
原创 语言学记-Python(一)入门
本文介绍了Python编程语言的基础知识。主要内容包括:Python简介及特点(易学、强大、跨平台);第一个程序"Hello World";注释写法;常见变量类型(字符串、整数、浮点数、布尔值)和运算符;基本数据结构(列表、元组、字典);控制流语句(if条件判断和for/while循环);函数的定义与调用;以及用户输入的获取方法。文章通过代码示例展示了Python简洁直观的语法特点,适合编程初学者快速入门。
2025-08-26 17:21:59
1016
原创 语言学记-C++(一)函数和变量
本文介绍了C++编程中的编译环境和变量定义相关内容。主要涵盖: 三大主流编译环境:GCC(使用g++)、Clang(使用clang++)和MSVC(使用cl.exe),分别适用于不同平台,其中Clang以错误提示清晰著称。 变量定义与初始化的多种方式: C风格初始化(=) 函数风格初始化(()) C++11推荐的列表初始化({}),具有通用性强、安全性高(防止类型收窄)等优势 变量类型系统: 基础数据类型(bool、char、数值类型等) C++11新增类型(auto、decltype、nullptr等)
2025-08-26 16:30:17
687
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅