自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第27天 -- 动态规划1 || 509.斐波那契数列 / 70.爬楼梯 / 746.使用最小花费爬楼梯

本文总结了动态规划基础知识和三个经典问题的解法。首先介绍了动态规划的五部曲方法论:定义dp数组、递推公式、初始化、遍历顺序和调试。然后通过三个典型题目进行实践:1)斐波那契数列问题,使用dp[i]=dp[i-1]+dp[i-2]递推;2)爬楼梯问题,解法与斐波那契类似;3)最小花费爬楼梯问题,采用min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])的递推方式。每个问题都给出了完整的C++实现代码,展示了如何将动态规划理论应用于实际问题求解。这些题目都是动态规划入门的基础训练,有助

2025-10-09 13:35:29 291

原创 代码随想录算法训练营第26天 -- 贪心5 || 56.合并区间 / 738.单调递增的数字

如果第 i 个区间的左边界 > 第 i - 1 个区间的右边界,那么就判定为不重叠,直接把第 i - 1 个区间放入 res 数组中;如果第 i 个区间的左边界 <= 第 i - 1 个区间的右边界,那么就判定为重叠,我们更新一下第 i 个区间的左右边界。,我们会从 10 开始处理,变成 900,但答案是 999。,所以,我们让前一位 - 1,然后让当前为都为 9;时,我们需要把最后一个放入 res 数组中,即。,因为左边界是按照从小到大排序的;,也就是只有一个区间,那么我们直接返回。

2025-10-06 16:10:14 173

原创 代码随想录算法训练营第25天 -- 贪心4 || 452.用最少数量的箭引爆气球 / 435.无重叠区间 / 763.划分字母区间

接着,如果第 i 个气球的左边界 > 第 i - 1 个气球的右边界,那么我们就让 结果res +1(当然,res 我们要初始化为1,因为没有气球的情况讨论完了,只要有一个气球,res 就是1);如果第 i 个气球的左边界 < 第 i - 1 个气球的右边界,那么我们就将第 i 个气球的右边界设置为第 i 个气球和第 i - 1 个气球的右边界的最小值。,接着我们需要更新第 i 个区间的右边界的值,让其等于 第 i 个和第 i - 1 个区间的右边界的最小值。然后,我们按照气球的左边界从小到大排序;

2025-10-06 01:14:45 420

原创 代码随想录算法训练营第24天 -- 贪心3 || 134.加油站 / 135.分发糖果 / 860.柠檬水找零 / 406.根据身高重建队列

前者表示当前的和,如果其和 < 0,那么我们就让其 = 0,然后从下一位开始重新开始计数;后者我们就计算整个 gas 和 cost 之差的和,如果小于 0,那么直接返回 -1。排序,如果身高相同,k小的在前面。然后,我们定义一个二维数组队列。,然后我们就进行插入操作。

2025-10-01 00:28:46 286

原创 代码随想录算法训练营第23天 -- 贪心2 || 122.买卖股票的最佳时机II / 55.跳跃游戏 / 45.跳跃游戏II / 1005.K次取反后最大化的数组和

本文总结了贪心算法在LeetCode中的四道典型题目解题思路:1) 股票买卖问题通过收集每日正利润实现;2) 跳跃游戏通过维护覆盖范围判断可达性;3) 跳跃游戏II通过记录当前和下一步覆盖范围计算最小跳跃次数;4) K次取反问题先对大负数取反,再处理剩余次数。核心思想都是通过局部最优选择达到全局最优解。代码实现简洁高效,体现了贪心算法的典型应用场景。

2025-09-29 23:45:42 555

原创 代码随想录代码训练营第22天 -- 贪心1 || 455.分发饼干 / 376.摆动序列 / 53.最大子数组和

这道题我们记录一下连续和,如果连续和 > 0,那么我们就让连续和重新赋值为0,因为它加上下一个下一个数,会使数变得更小。比如下图这种情况,我们的结果是2,但是如果只按照上述两种情况来解决,答案会算出来是3。当有两个元素的时候,我们往左延出一个元素与左边元素相等,也就是使得。然后对于末尾的元素,我们直接让结果 + 1,也就是我们直接初始化。然后从头开始遍历饼干,如果胃口小于等于饼干,那么胃口下标就++即可,然后遍历的时候不遍历最后一个元素。当只有1个元素的时候,我们直接返回1;,也就是在判断当中再更新。

2025-09-28 20:33:20 258

原创 代码随想录算法训练营第21天 -- 回溯4 || 491.非递减子序列 / 46.全排列 /47.全排列 II

进行去重,并且我们让其在 for 循环外面,保证每次递归都重新定义一个哈希 set,这样回溯我们就不用对 set 进行 pop 操作了。本题其实,树枝去重和树层去重都可以,下面以 [1, 1, 1] 为例,画出树层去重和树枝去重的两个树状图。数组,因为本题的序列不是单调的,相同的数可能不挨在一起,但我们依然要做树层去重,这里我们使用哈希。除此之外,本题还需要先对数组进行排序,然后再进行上一题和去重的操作。但是,一般树枝去重的效率不如树层去重,我们会优先选择树层去重。所以,在去重操作的代码中,

2025-09-25 21:27:30 672

原创 代码随想录算法训练营第20天 --回溯3 || 93.复原 IP 地址 / 78.子集 / 90.子集 II

首先我们对不符合条件进行剪枝,每个整数最小为1位数,最大为3位数,所以字符串位数小于4或者大于12的都不符合。之前的题,最终的结果都在叶子节点,子集的题在所有节点,这就是区别所在。然后循环,看数字大小,大于 255 的不符合,输入非法数字的不符合。,那么就是切了第一个元素,判断是否符合IP地址,传入的区间就是,对于子集问题,收集结果都是在递归函数的开始,并且不需要终止条件。接着进入我们的递归函数阶段,首先我们传入的参数有,字符串。的后面插入逗点,然后递归,回溯,即可。如果第一位是0,后面还有数字,比如。

2025-09-24 15:52:32 418

原创 代码随想录算法训练营第19天 -- 回溯2 || 39.组合总和 / 40.组合总和II / 131.分割回文串

元素的元素,找出和为target的组合,不能重复使用同一个元素(如果数组中有相同数字,可以使用多次),组合不能重复。给定一个不含重复元素的元素,找出和为target的组合,数字可以重复使用,但组合不能重复。了,然后进行递归,也就是纵向遍历,我们并不对此去重,所以循环是正常的,不需要任何跳过。本题和上期组合不同之处在于:这道题递归时可以带上已经选取的元素,在递归传参时不一样。反观,对于横向遍历,也就是for循环,我们需要树层去重,所以递归结束,我们回溯。,进而如果遇到相同的数字,直接跳过,完成去重操作。

2025-09-23 20:41:03 294

原创 代码随想录算法训练营第18天 --回溯1 || 77.组合 / 216.组合总和III / 17.电话号码的字母组合

为什么不是 -1 呢,就是当等于 -1 的时候还应该再进行操作,所以不能-1,否则少一次操作。我们可以发现纵向遍历深度由输入数字长度决定,横向遍历宽度由该数字的由几个字母决定。的每一个数字,再映射到其相对应的的字母上,再进行for循环递归回溯即可。结构来描述,横向遍历用 for 循环,纵向遍历用递归。数组中的元素个数,也就是控制着递归的深度,纵向遍历;我们做剪枝的操作就是再范围部分做处理。所以我们传入参数,一个是。即数字的下标,从0开始。我们的递归终止条件就是当。即输入的数字,一个是。

2025-09-22 20:52:49 323

原创 代码随想录算法训练营第17天 -- 二叉树8 || 669.修剪二叉搜索树 / 108.将有序数组转换为二叉搜索树 / 538.把二叉搜索树转换为累加树

如果头节点为空节点,我们就返回NULL;如果头节点不为空节点,并且头节点的值小于左边界或者头节点的值大于右边界,我们就循环,如果头节点的值小于左边界,我们就让头节点指向头结点的右子树;首先,当 cur 的左节点不为空,并且其值 < 左边界,我们就让左节点指向左节点的右节点。节点的左子树就等于递归左子树得到的返回值,即。其次我们就递归,确定左右边界,这里我们采用。,是在找其左子树中右节点符合条件的值。首先我们需要找到根节点,就是中间节点。上述操作,我们能确保的是能找到新的。双指针法,本题的遍历顺序是。

2025-09-21 01:54:40 615

原创 代码随想录算法训练营第16天 -- 二叉树7 || 235.二叉搜索树的最近公共祖先 / 701.二叉搜索树中的插入操作 / 450.删除二叉搜索树中的节点

对于二叉搜索树,我们尽量要去利用其性质,如果去遍历整颗树,就是对二叉搜索树的侮辱。这里我们的递归函数是由返回值,若无返回值,解法可能会有难度。都是合法的,所以递归终止条件可以删除,向左向右遍历里的。按照上一篇发的普通二叉树的求法,依然可以。当然上述代码还可以进一步优化,题里说。对于二叉搜索树,迭代法相当简单。本题我们可以不改变树的结构。之间,我们就返回该节点。右侧,我们就向左遍历;左侧,我们就像右遍历;首先我们从根节点开始。

2025-09-20 02:44:30 435

原创 代码随想录算法训练营第15天 -- 二叉树6 || 530.二叉搜索树的最小绝对差 / 501.二叉搜索树中的众数 / 236.二叉树的最近公共祖先(难)

接着将最大频率的元素放入数组中,然后遍历整个数组,如果频率和最大的频率相等,就把相对应的。二叉树不能从下往上遍历,遇到本题最先想到的是如何能从下往上遍历二叉树,当然是不可行的。如果该节点的左子树出现节点 p,右子树出现节点q,那么这个节点就是最近公共祖先。首先我们需要定义一个函数来记录元素出现的频率,第一次遍历二叉树,这里我们采用。下面,我们来区分一个事情,什么是搜索一条边,什么是搜索整棵树。同理,如果左子树没有出现,右子树出现,我们也向上返回。的过程,根据左右孩子的情况,返回给中间节点。

2025-09-18 21:23:54 1033

原创 代码随想录算法训练营第14天 -- 二叉树5 || 654.最大二叉树 / 617.合并二叉树 / 700.二叉搜索树中的搜索 / 98.验证二叉搜索树

文章摘要: 本文介绍了四道二叉树相关算法题的解题思路与代码实现。 654.最大二叉树:通过递归构建二叉树,每次找到数组最大值作为根节点,分割左右子数组递归处理。优化版本通过下标控制区间,避免频繁创建新数组。 617.合并二叉树:递归遍历两棵树,节点值相加,可直接修改原树或创建新树。 700.二叉搜索树搜索:利用二叉搜索树特性递归或迭代查找目标值。 98.验证二叉搜索树:中序遍历结果应为严格递增序列,通过检查数组单调性判断合法性。 代码均采用C++实现,强调递归终止条件和遍历顺序。

2025-09-17 20:42:42 1230

原创 代码随想录算法训练营第13天--二叉树4 || 513.找树左下角的值 / 112.路经总和 113.路径总和ii / 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

本文介绍了LeetCode中关于二叉树路径和与构造二叉树的三个题目解法。513题通过递归法和迭代法寻找树的最底层最左节点值,递归法通过深度优先遍历,迭代法则采用层序遍历。112题使用回溯法判断是否存在路径和等于目标值,113题扩展为记录所有满足条件的路径。106题则通过拆分中序和后序遍历序列递归构造二叉树。这些题目展示了二叉树遍历、回溯和递归分治的典型应用,解题关键在于正确处理递归终止条件、回溯操作以及序列的拆分逻辑。

2025-09-16 22:31:53 790

原创 代码随想录算法训练营第12天 --二叉树3 || 110.平衡二叉树 / 257.二叉树的所有路径 / 404.左叶子之和 / 222.完全二叉树的节点个数

所以,我们方法是,判断父节点的左孩子是否有左右孩子,如果有,那就继续递归遍历,如果无,把父节点的左孩子的值返回给父节点。我们之后会定义,如果不符合平衡二叉树,会返回-1,那就一直向上传-1,把-1传到根节点。关键点在于:我们要把叶节点的值1返回给父节点,如果我们按照之前的方式去求解,是找不到父节点。我们可以利用完全二叉树的性质,在普通二叉树的基础上,增加递归终止条件进而进行求解。,要在递归终止条件之前写,如果在终止条件下面写的话,会少最后一个元素的情况。,我们在原来“主”函数里,判断函数返回值是否等于。

2025-09-16 00:23:17 556

原创 代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度

因为我们先翻转左子树,然后翻转中间节点,原来翻转过来的左子树翻转到右侧,我们又一次翻转右子树,那么把原来翻转过来的左子树又翻转回去了。最后为什么要加1呢,想想之前的二叉树,是左右,然后中,中是1 + max(左,右)。然后我们就像100.相同的树一样去比较是否相等,不相等我们就递归isSubtree函数,直到找到相等的子树。的概念,对于一个二叉树,最上面的根节点的深度为1,高度就是深度的最大值,也就是说高度和深度是反转关系的。这道题的关键是要判断外侧相等,里侧相等,比较根节点的左右两棵子树能否互相翻转。

2025-09-14 17:33:45 1131

原创 代码随想录算法训练营第十天 -- 二叉树1 ||1.递归遍历--144/145/94 2.迭代遍历--144/145/94 3.统一迭代 4.层序遍历--10道题

本文介绍了二叉树的基础知识及遍历方法。主要内容包括: 二叉树的四种类型:满二叉树、完全二叉树、二叉搜索树和平衡二叉搜索树。 两种存储方式:链性存储和线性存储(数组存储),并给出了线性存储时节点与子节点下标的计算关系。 遍历方式分为深度优先搜索(前序、中序、后序遍历)和广度优先搜索(层序遍历),说明了不同遍历顺序的区别。 详细介绍了递归遍历的实现方法,提出了"递归三部曲"模板,并给出了前序、中序、后序遍历的递归代码示例。 讲解了非递归迭代遍历的实现思路,特别说明了前序遍历时使用栈的入栈顺序

2025-09-13 19:23:55 827

原创 代码随想录算法训练营第九天 --栈和队列2 || 150.逆波兰表达式求值 / 239.滑动窗口最大值 / 347.前k个高频元素

摘要 本文解析了三道LeetCode算法题的解题思路与代码实现: 逆波兰表达式求值(150题):通过栈结构实现,遇到数字入栈,遇到运算符取出栈顶两个元素运算后结果入栈。关键点在于减法除法操作数的顺序处理。 滑动窗口最大值(239题):设计单调队列维护窗口最大值。队列保持递减顺序,队首始终为最大值。通过push()和pop()方法动态维护队列,每次滑动获取队首元素即为窗口最大值。 前K个高频元素(347题):先用哈希表统计频率,再使用小顶堆(优先级队列)对频率排序。维护大小为K的堆,最终倒序输出即为前K高频元

2025-09-11 21:38:23 1246

原创 代码随想录算法训练营第八天 -- 栈和队列1 || 232.用栈实现队列 / 225.用队列实现栈 / 20.有效的括号 / 1047.删除字符中的所有相邻重复项

然后,我们将栈中元素依次出栈,存入到新的字符串中,但此时字符串和原来字符串是相反的,所以我们还需要反转一下字符串。此外,其实我们可以利用字符串来模拟栈,这样我们就可以不用反转,代码也变得更加简洁。:如果遇到右括号,再看其与栈头元素是否匹配,如果不匹配,就返回false。:如果遇到右括号,先看栈是否为空,如果为空,那么就返回false。:最后,如果栈里还有元素,说明左括号剩余,返回false。:字符串里右方向的括号多余了,所以不匹配。时,我们就让该元素进栈,否则我们就出栈。,当入栈时,队列也入队。

2025-09-11 11:39:22 543

原创 代码随想录算法训练营第七天 -- 字符串2 || 151.反转字符串中的单词 / kamacoder55.右旋字符串 / 28.找出字符串中第一个匹配项的下标 / 459.重复的子字符串

本文总结了字符串处理的四道算法题解:151题通过三步(去空格、整体反转、单词反转)实现字符串单词反转;kamacoder55题通过三次局部反转完成右旋字符串;28题介绍了KMP算法用于字符串匹配;459题判断字符串是否由重复子串构成。每道题都提供了详细的解题思路和代码实现,特别是对去空格优化和KMP算法进行了重点讲解。

2025-09-09 21:33:31 915

原创 代码随想录算法训练营第六天 -- 字符串1 || 344.反转字符串I / 541.反转字符串II / kamacoder54.替换数字--第八期模拟笔试

假设n = 3,k = 3,i = 0,第一次是符合的,如果没有等于,那么就不符合,明显不对。我们遍历原字符串,如果原字符串某个字符是字母,那么就在新字符串中最后一个位置填上原来字符串的字母;区间,第 k 个元素的下表是 i + k - 1,那么反转的区间是。如果原来字符串某个字符是数字,那么就在新字符串从后到前依此填上。本道题是要使用双指针,使用相向双指针的方法。首先我们要给原来字符串扩容,这里用到的是。,扩容后新字符串的最后一个字符的索引为。的范围可以到0,它指的是索引下标。这道题是在讲,一个字符串。

2025-09-08 22:28:20 904

原创 代码随想录算法训练营第六天 - 哈希表2 || 454.四数相加II / 383.赎金信 / 15.三数之和 / 18.四数之和

本文总结了算法训练营第六天的学习内容,包括四道哈希表相关题目解法。454.四数相加II通过分组+哈希表将O(n^4)优化为O(n²);383.赎金信使用数组哈希统计字符频率;15.三数之和采用排序+双指针法,重点处理去重逻辑;18.四数之和在双指针基础上增加一层循环。核心思想是利用哈希表优化查找效率,通过排序+双指针处理多数和问题,同时注意各类边界条件和去重处理。

2025-09-08 18:46:06 1064

原创 代码随想录算法训练营第五天--哈希表1 || 242.有效的字母异位词 / 349.两个数组的交集 / 202.快乐数 / 1.两数之和

本文介绍了哈希表在算法题中的应用,重点讲解了242.有效的字母异位词、349.两个数组的交集、202.快乐数和1.两数之和四道题的哈希解法。哈希表分为数组、set和map三种类型,根据数值范围和需求选择合适类型。对于字母异位词使用数组统计字符频率;数组交集问题使用set存储和查询;快乐数问题用set记录平方和;两数之和则用map存储元素值和索引。文章详细说明了各题的解题思路和代码实现,并强调了哈希表在快速查询元素存在性方面的优势。

2025-09-07 17:16:23 1078

原创 代码随想录算法训练营第四天 || 24.两两交换链表中的节点 /19.删除链表的倒数第N个节点 / 面试题02.07.链表相交 / 142.环形链表II

本文总结了链表相关算法题解,包括两两交换节点、删除倒数第N个节点、链表相交和环形链表检测。关键点在于使用虚拟头节点简化操作,双指针技巧(快慢指针)解决特定位置问题,以及通过长度差处理链表相交问题。对于环形链表,需判断环的存在并找到入口节点。这些题目展示了链表操作中的常见模式,如临时指针保存节点、指针移动策略和边界条件处理。

2025-09-06 23:38:49 836 1

原创 代码随想录算法训练营第三天 || 203.移除链表元素 707.设计链表 206.反转链表(双指针 or 递归)

本文总结了链表操作的三个经典题目解法:203题移除链表元素提供了不设虚拟头节点和引入虚拟头节点两种方法;707题设计链表实现了完整的链表操作API;206题反转链表展示了双指针和递归两种解法。关键点在于正确处理头节点/虚拟头节点,以及准确维护指针关系。易错点包括循环条件判断、指针初始化和size维护等,建议通过绘制链表示意图和测试边界条件来验证代码正确性。

2025-09-06 15:14:10 776

原创 代码随想录算法训练营第二天 || 209.长度最小的子数组(滑动窗口)59.螺旋矩阵II(旋转90°的写法)kamacoder 58.区间和(前缀和)kamacoder 44.开发商购买土地(前缀和)

该文章摘要总结了代码随想录算法训练营第二天的核心内容,主要包含两个LeetCode题目和两个kamacoder问题的解法: 209.长度最小的子数组:介绍了暴力解法(O(n²))和优化的滑动窗口解法(O(n)),重点讲解了如何通过同向双指针动态调整窗口大小来寻找满足条件的最短子数组。 59.螺旋矩阵II:提供了两种解法: 方法一:利用循环不变量原则(左闭右开)分层填充数字 方法二:通过定义方向数组实现90°旋转的巧妙填充方法 还提及了kamacoder平台上的区间和与开发商购买土地两个前缀和相关问题。 文章

2025-09-04 16:29:10 799

原创 代码随想录算法训练营第一天 || (双指针)27.移除元素 26.删除有序数组中的重复项 283.移动零 977.有序数组的平方

双指针算法,leetcode27 26 283 977四道题精讲

2025-09-03 15:57:43 551

原创 代码随想录算法训练营第一天 | (二分查找类型)704.二分查找 35.探索插入位置 34.在排序数组中查找元素的第一个和最后一个位置

本文总结了二分查找算法在三种典型题目中的应用:基本二分查找(704)、搜索插入位置(35)和查找元素范围(34)。重点讲解了循环不变量概念(左闭右闭和左闭右开两种区间定义)及其实现方式,给出了详细的代码示例和边界条件分析。对于704题演示了两种区间写法的差异;35题解释了插入位置的确定逻辑;34题提供了两种解法模板,包括标准二分和左开右开区间法。全文强调二分查找的关键在于正确维护区间定义,并针对不同问题特点选择合适写法。

2025-09-03 13:29:44 1248

原创 acwing 快排

学习acwing的快排。

2025-08-24 16:35:25 426

原创 leetcode (二分查找) 34.在排序数组中查找元素的第一个和最后一个位置

本文介绍了使用二分查找在排序数组中查找元素第一个和最后一个位置的方法。采用开区间二分法,初始化left和right为数组边界外。通过lower_bound函数找到第一个等于target的位置,若不存在则返回[-1,-1]。然后将target+1传入该函数,结果减1得到最后一个位置。这种方法高效简洁,时间复杂度为O(logn)。关键点在于正确理解二分查找的边界条件和区间定义。

2025-08-24 01:08:07 353

原创 leetcode(同向双指针 滑动窗口)209.长度最小的子数组 713.乘积小于K的子数组 3.无重复字符的最长子串

本文介绍了三道滑动窗口基础算法题的解题思路: 209题通过维护左右指针和当前和,寻找满足条件的最短子数组长度; 713题利用滑动窗口统计乘积小于k的子数组数量,注意处理k<=1的特殊情况; 3题使用哈希表记录字符出现次数,维护无重复字符的最长子串长度。三题的时间复杂度均为O(n),空间复杂度O(1),通过滑动窗口技巧有效降低了时间复杂度。

2025-08-23 16:59:03 394

原创 leetcode(双向指针)(前后缀分解) 11.盛最多水的容器 42.接雨水

本文介绍了两个LeetCode容器问题的解法:盛最多水的容器和接雨水。对于盛水容器问题,采用双指针法,通过比较左右柱子高度移动指针计算最大面积。接雨水问题提供两种解法:1)前后缀分解法,通过预处理前缀和后缀最大值数组计算每列的积水量;2)优化后的双指针法,动态维护左右两侧最大值,空间复杂度更低。两种方法的时间复杂度均为O(n),但双指针法空间复杂度优化到O(1)。文中包含图示和代码实现,帮助理解解题思路。

2025-08-23 02:01:11 722

原创 leetcode (双指针法)167.两数之和 15.三数之和 344.反转字符串

本文总结了三道算法题的解题思路和代码实现:1. 两数之和II使用双指针法,通过调整左右指针来寻找目标值;2. 三数之和将问题转化为两数之和,同样使用双指针并处理重复解;3. 反转字符串提供了双指针和单指针两种解法。三题都利用了指针移动和边界调整的思想,通过排序预处理和指针操作有效降低了时间复杂度。

2025-08-22 00:46:23 293

原创 leetcode1512.好数对数目

本文介绍了LeetCode第1512题"好数对的数目"的两种解法。第一种暴力统计法通过双重循环比较所有数对,时间复杂度O(n²)。第二种哈希表法利用统计数字出现次数,通过组合数公式计算好数对数量,将时间复杂度优化至O(n)。两种方法的空间复杂度均为O(1)。文章展示了两种解法的C++实现代码,对比了它们的优缺点,体现了算法优化的思路。

2025-08-20 16:51:53 186

原创 Chapter 18 数据在内存中的存储

超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,分为大端字节序存储和小端字节序存储。(1)大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。(2)小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。

2024-09-15 16:31:17 1107

原创 C语言原码、反码、补码(1)

C语言原码、反码、补码(1)

2024-08-28 22:20:05 745

原创 C语言调试

C语言调试

2024-08-27 21:52:32 332

原创 函数部分细节知识点(零碎)

函数部分细节知识点(零碎)

2024-08-27 21:22:30 232

原创 一文搞定找最大公约数(三种方法)

寻找最大公约数的3种方法

2024-08-25 16:39:19 649

2-Python基础.ipynb

2-Python基础.ipynb

2024-08-16

空空如也

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

TA关注的人

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