解题
文章平均质量分 92
所有题博主写得都很用心
秦少游在淮海
自由
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动规 - 子数组、子串系列
本文总结了动态规划算法在解决子数组/子字符串问题中的应用,包括最大子数组和、环形子数组最大和、乘积最大子数组、乘积为正数的最长子数组、等差数列划分、最长湍流子数组、单词拆分和环绕字符串子串等8个典型题目。每道题都详细分析了状态表示、状态转移方程、初始化、填表顺序和返回值五个关键步骤,并提供了两种实现方式(常规和多开辟空间)。文章强调动态规划的核心在于确定合适的状态表示和推导状态转移方程,并通过初始化保证填表正确性。最后总结了动态规划解题的通用步骤:1)确定状态表达式;2)推导状态方程;3)初始化;4)确定填原创 2025-06-29 09:50:28 · 932 阅读 · 0 评论 -
C++ - vector 的相关练习
在C++中,对于vv[i][j]而言,是两次函数调用;对于C语言来说,静态开辟的一维数组或者二维数组均是一次解引用实现数据的访问,数组的访问本质上均会转换成指针的访问,所以C语言的访问数组中的元素一定会转换成对指针的解引用;vv[i][j] 会转化成 vv.operator[](i).operator[](j) ;其中 vv.operator[](i) 返回的是 vector<int> 的对象,而vector<int>.operator[](j) 返回值为 int 对象;相当于第一个 operator[]原创 2025-06-26 15:06:25 · 837 阅读 · 0 评论 -
动态规划 - 简单多状态 dp 问题
本文系统性地总结了力扣平台上8道经典的动态规划题目,包括按摩师问题、打家劫舍系列、股票买卖系列等。针对每道题目详细分析了状态表示、状态转移方程、初始化方法、填表顺序和返回值设计。特别对股票买卖问题中的冷冻期、手续费、交易次数限制等复杂条件进行了深入剖析,提供了清晰的解题思路和代码实现。通过多维度状态细分(如买入/卖出状态、交易次数记录)和分类讨论(如环形问题转为线性),展示了动态规划解决复杂问题的通用方法,为类似问题的解决提供了可复用的模板。原创 2025-06-23 12:15:39 · 960 阅读 · 0 评论 -
动态规划 - 路径问题
本文介绍了若干动态规划路径问题的解法,包括不同路径、带障碍路径、珠宝价值、下降路径最小和、最小路径和及地下城游戏。通过五步法(状态表达式、转移方程、初始化、填表顺序、返回值)系统分析每道题目,重点讲解如何通过多开辟行列简化初始化,以及如何通过状态转移方程求解最优路径。针对不同题目特性(如障碍物、路径方向限制等)提供了相应的状态转移策略,并强调了填表顺序和下标的正确映射。典型解法包括:使用二维DP表记录路径数或最优值,通过比较相邻状态推导当前状态,最后返回目标位置的值。原创 2025-06-15 13:57:18 · 1105 阅读 · 0 评论 -
c++ - 关于 string 的练习题
本文整理了4道字符串处理经典算法题:1)反转字母(双指针交换法);2)首个不重复字符(哈希统计法);3)大数相加(模拟进位运算);4)末单词长度(反向查找法)。重点讲解了各题的解题思路和优化方法,包括使用isalpha判断字母字符、计数排序统计字符频率、处理进位问题等技巧。每道题都提供了参考代码和关键说明,强调合理使用string类接口函数的重要性,如getline读取带空格字符串、rfind反向查找等。原创 2025-06-12 16:15:57 · 1260 阅读 · 0 评论 -
leetcode - 分治-三路划分快速排序总结
分治,即分而治之;将大问题拆解为相同或者相似的子问题,然后在这个子问题额基础上继续进行划分,直到划分到某一个位置为止(该子问题可以快速解决);其中,排序之中,快排、归并排序就是典型的分治思想;其中三路划分版本快排:首先第一步是寻找一个基准值 key , 我们目标是将数组nums 划分为三个部分,一部分小于 key , 一部分等于 key , 另一部分大于key ;这样划分之后,便不用管等于key 的区域,因为中间的这部分区域中的数据一定是到了最终合适的位置上;原创 2025-06-10 09:45:18 · 739 阅读 · 0 评论 -
模拟 - #介绍 #题解
本文主要介绍了模拟类题目的解题思路和具体实现方法。通过5道力扣例题(替换问号、提莫攻击、Z字形变换、外观数列、数青蛙)详细讲解了模拟题的解题过程:1. 理解题意,分析算法流程;2. 将思路转换为代码实现;3. 针对特殊情况处理优化。文章强调模拟题需要先在纸上理清逻辑,再通过找规律等方式优化代码性能。每道题都提供了详细的分析过程和代码示例,展示了从暴力模拟到优化算法的解题思路。原创 2025-06-08 17:48:12 · 798 阅读 · 0 评论 -
位运算 #常见位运算总结 #题解
本文总结了常见的位运算操作及其在LeetCode算法题中的应用。内容涵盖基础位运算操作(左移、右移、按位与/或/异或)、位运算技巧(提取最右侧1、去除最右侧1等),并通过10道LeetCode题目(如位1计数、汉明距离、只出现一次的数字等)展示了位运算的实际应用。特别强调了位运算在优化空间复杂度方面的优势,如利用单个变量的比特位实现哈希表功能(位图思想)。文章还详细解析了每道题的位运算解法,包括代码实现和优化思路,为处理二进制相关算法问题提供了实用指导。原创 2025-06-01 10:26:55 · 1009 阅读 · 0 评论 -
动态规划 - 斐波那契数列模型
本文介绍了leetcode中几道典型的斐波那契数列模型相关的题目。通过详细分析问题、定义状态表示、推导状态转移方程、初始化、填表顺序和返回值等步骤,给出了清晰的解题思路和代码实现。文章重点对“第N个泰波那契数”、“三步问题”、“最小花费爬楼梯”和“解码方法”等题目进行了深入讲解,并提供了空间优化技巧和多维解法。同时,强调了动态规划问题的边界处理和下标映射关系的重要性,为读者提供了一套完整的动态规划解题方法论。原创 2025-05-29 09:37:01 · 958 阅读 · 0 评论 -
leetcode - 前缀和
本文详细解析了前缀和与后缀和在解决数组问题中的应用,文章通过具体例题如二维前缀和、寻找数组中心下标、除自身以外数组的乘积等,展示了如何高效利用前缀和数组优化计算。同时,针对连续子数组问题,介绍了结合哈希表快速查找的技巧。此外,还探讨了同余定理在解决子数组和问题中的关键作用,以及如何通过修正负数取余结果确保正确性。最后,文章提供了各题目的参考代码实现,帮助读者深入理解算法思路和实现细节。原创 2025-05-24 12:08:26 · 1150 阅读 · 0 评论 -
高效掌握二分查找:从基础到进阶
本文介绍了二分查找算法及其在多个leetcode题目中的应用。二分查找的核心在于利用数据的二段性,通过不断缩小查找范围来快速定位目标值。文章详细讲解了朴素的二分查找模板,并在此基础上扩展了查找左边界和右边界的模板。通过多个具体题目的分析,展示了如何根据问题的特点选择合适的二分查找策略,并处理循环条件、中间点计算等细节问题。最后,文章总结了二分查找的本质及其在不同场景下的应用,帮助读者更好地掌握这一算法。原创 2025-05-19 14:59:32 · 1156 阅读 · 0 评论 -
leetcode - 滑动窗口问题集
滑动窗口,无非就是利用两个同向双指针,根据题干的要求设置入窗口的条件、出窗口的条件以及什么时候更新结果;需要注意的是,更新结果的地方是不确定的,可能是在入窗口后更新结果,也有可能是在出窗口之后才更新结果,需要根据具体的题意定夺;原创 2025-05-14 10:01:09 · 1328 阅读 · 0 评论 -
leetcode - 双指针问题
经过以上练习,我们应该可以显然地感受到这类题的特点:从两端向中间出发,逐渐缩小数据范围,必要时,还可以借助于数据的单调性一起使用;借助于单调性会极大地提高代码的效率;原创 2025-05-09 19:04:04 · 1230 阅读 · 0 评论 -
leetcode解题 - #用栈实现队列 #用队列实现栈 #循环队列
对于此题,我们首先需要思考,该循环队列用什么实现合适;我们先来思考能否用链表实现;必然是会用到循环链表(仅使用单链表实现循环队列是非常麻烦的,因为单链表中的结点(假设该结点存在上一结点与下一结点)只能找到下一结点,找该结点的上一结点是非常麻烦的;当然,可以使用双链表来实现,但是此处还是先考虑"简单、节约空间"的结构是否能解决此问题),循环链表中的尾结点中的next 指向头结点;(假设用单向循环链表来实现会使用到两个变量phead 与 ptail 分别指向循环队列中的头和尾)假设题干要求循环队列有原创 2024-10-22 21:49:17 · 1027 阅读 · 0 评论 -
解题 -- 有关二进制的题型总结
我们可以将奇数位上全是1的数与目标数值进行按位与,得到目标数值中奇数位上数据,再利用右移操作符>> 将奇数位上的数据向右移动一位;同理,可以将偶数位上全是1的数与目标数值进行按位与,得到目标数值中偶数位上的数据,然后再利用左移操作符原创 2024-09-24 21:48:30 · 1026 阅读 · 0 评论 -
解题-offsetof 宏的模拟实现
看图容易理解,但是若想要通过计算得到偏移量该如何做呢?如果起始位置的地址为0的话,此时取出成员a 的地址便是其偏移量,同理取出成员i 、成员c 的地址对应的也是其偏移量;即当起始地址为0的时候,相应地取出其地址便是得到了其偏移量;那么如何让结构体变量的其实地址为0呢?0这个地址的空间是不可以进行访问的,但是并不代表不可以使用这个地址;只要将地址0进行强制类型转换成该结构体变量类型的地址;原创 2024-09-17 20:49:39 · 483 阅读 · 0 评论 -
解题 - 模拟实现 atoi
atoi 函数的要求:1、在字符串中如果首先遇到的是空白字符串,便会跳过这些空白字符串(可以利用库函数 isspace 进行操作)2、可以识别 + 或者 - , 即atoi 返回的整型可以带上符号;3、遇到数字字符便会将数字字符转换成数字;如果遇到非数字字符便会直接返回;4、函数atoi 返回的值可能会存在超出int 所表示的数据的范围;原创 2024-09-13 11:13:37 · 1227 阅读 · 0 评论 -
解题--有关动态内存开辟 几道经典的笔试题
当函数GetMemory 返回的时候,其函数栈帧便会销毁,紧接着便会返回调用GetMemory的位置,然后执行以下的代码:printf(str) ; printf 为库函数,在使用的时候也会创建属于库函数printf 自己的函数栈帧,即会对Test 函数栈顶上的空间进行重新使用,那么原来GetMemory函数中变量p 所占的空间里存放的数据便很有可能被覆盖;而一旦被覆盖,那么此空间中的值便被改变了;原创 2024-09-04 19:49:15 · 997 阅读 · 0 评论 -
解题-写一个程序判断当前机器的大小端存储模式 #两种方法
核心:整型变量会向内存申请 4 byte 的空间来存放数据,此时给这个变量一个值 :1;然后取其第一个字节空间的数据看是0还是1;是0则为大端字节序,因为大端字节序存储模式会将低位字节序的数据放在高地址处;而若是1,则就为小端字节序,因为小端字节序的存储模式会将低位字节序的数据放在低地址处;原创 2024-08-30 20:37:27 · 1035 阅读 · 0 评论 -
解题—求两数的最大公约数与最小公倍数 #辗转相除法
(a,b)-->求 a,b 的最大公约数(a,b)本质原理:a/b=q…r如果有两个整数a,b 便会存在唯一的一个整数q和r,满足式子 a/b=q...r经过上面图形的启发,我们可得知:(a,b)=(b,r)如何验证这个公式呢?由a/b=q…r,可得a=b*q+r;以及r=a-b*q;假设(a,b) = d1; 则可以得到 a= d1*m,b=d1*n,其中(n,m)=1,即m与n 互质;存在n与m均属于整数那么可知:r=d1*m -di*n*q= d1(m-ng);原创 2024-08-22 23:18:05 · 4458 阅读 · 0 评论 -
解题—杨氏矩阵
补充说明:时间复杂度小于O(N) 是什么意思?如果此数组有n 个元素,那么在找其中某一个元素时,在其最坏的情况下找了n 次才找到,此时的时间复杂度便是O(N);同样说明,此处不能采用利用循环来遍历查找;原创 2024-08-09 08:53:25 · 707 阅读 · 0 评论 -
解题 - 左旋字符串的三种解法(思路)
思路一:循环;创建临时变量来支持整个数组的前移;思路二:利用库函数strcpy 与 strncat +创建一个足够大的数组思路三:发现规律;翻转的巧妙原创 2024-08-04 21:03:26 · 647 阅读 · 0 评论
分享