- 博客(18)
- 收藏
- 关注
原创 LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++
本题为经典的有序矩阵二分查找问题有序性利用:通过矩阵的 “每行内部有序” 和 “行间递增” 特性,将二维搜索转化为一维问题。二分查找算法:包括手动实现二分逻辑、使用标准库函数(如)、以及通过数学映射(压缩映射)优化效率。本题通过不同层次的解法展示了算法优化的思路:从暴力枚举到利用有序性的二分查找,再到通过数学映射实现全局最优解。核心在于深入理解题目条件(有序性),并选择合适的数据结构与算法降低时间复杂度。熟练掌握二分查找的原理和变种,是解决此类问题的关键。荆轲刺秦!!!
2025-06-01 16:05:38
1336
原创 LeetCode算法题 (反转链表)Day17!!!C/C++
(不提供代码,请同学自行实现)这里主要讲述一下思想,感兴趣的小伙伴可以自己动手试一试。
2025-05-05 15:40:17
818
原创 LeetCode算法题 (设计链表)Day16!!!C/C++
这道题目让我们自己动手实现一个链表数据结构,主要包含获取节点值、头部插入、尾部插入、指定位置插入和删除这五个核心操作。通过这个实现过程,我们深入理解了链表的基本特性和操作原理。链表最大的特点是插入删除高效,尤其是头部操作只需要O(1)时间,这比数组要快很多。但是链表访问元素需要从头遍历,时间复杂度是O(n),不如数组的随机访问快。在实际开发中,如果经常需要在头部插入删除数据,链表是更好的选择;如果需要频繁按位置访问数据,数组会更合适。实现链表时要注意几个关键点:使用虚拟头节点可以简化操作;
2025-05-03 17:17:29
1010
原创 LeetCode算法题 (移除链表元素)Day15!!!C/C++
在处理链表删除操作时,使用虚拟头节点能有效简化代码,避免因头节点的特殊情况而增加的复杂逻辑,提高代码的可读性和可维护性。两种方法的时间复杂度均为线性,已达到最优解。在实际编程中,要养成手动释放堆区内存的习惯,防止内存泄漏。!!荆轲刺秦!!!
2025-05-02 14:38:45
683
原创 LeetCode算法题 (除自身以外数组的乘积)Day14!!!C/C++
本题要求在不使用除法且时间复杂度为 O(n) 的条件下,计算数组中除自身元素之外其余各元素的乘积。解题过程需结合题目要求与数据限制,通过逐步优化算法来实现目标。在暴力解法中,采用双重循环遍历数组,对每个元素计算其余元素的乘积,虽然逻辑直观,但时间复杂度高达 O(n^2),无法满足题目数据范围的要求。数学分类法通过统计数组中零的数量进行分类讨论,优化了时间复杂度至 O(n)。当数组中有一个零,结果数组中零位置为其余非零元素乘积,其余位置为零;若有多个零,结果数组全为零;
2025-04-30 18:20:57
869
原创 LeetCode算法题 (二分查找)Day13!!!C/C++
二分查找法是一种高效且重要的算法,在有序数组中查找目标值时具有显著优势。掌握二分查找法的核心思想、易错点及适用场景,能帮助我们在合适的情况下高效地解决问题,同时避免因细节问题导致的错误。在实际应用中,要根据具体的数据特点和操作需求,灵活选择和运用算法,以达到最佳的效果。!!荆轲刺秦!!!
2025-01-08 15:49:08
1902
原创 LeetCode算法题 (最后一块石头的重量)Day12!!!C/C++
希望通过今天的分享,大家对这道石头重量问题有了更深入的理解。从最初的暴力解法到利用哈希表优化,我们看到了不同思路和方法带来的巨大差异。在今后的学习和工作中,当面对类似问题时,希望大家能够灵活运用所学知识,不断探索更高效的解决方案。无论遇到什么困难,都不要放弃,相信自己一定能够找到最优解。荆轲刺秦!!!
2025-01-05 14:20:21
830
原创 LeetCode算法题 (二叉树的直径)Day11!!!C/C++
通过今天的题目,我们了解了二叉树这一数据结构,也通过了一个问题拆分成若干个子问题来帮助我们完成今天的这道题目。以上就是关于这个二叉树问题的全部分析了。如果后续你遇到类似的问题,或者对这一问题有了新的思考方向,都可以再次回顾我们的讨论内容。相信你在不断实践和思考中,能够轻松应对这类问题。荆轲刺秦!!!
2025-01-04 17:27:21
516
原创 LeetCode算法题 (最小栈)Day10!!!C/C++
本题旨在设计 MinStack,除常规入栈、出栈、查看栈顶元素操作外,重点要在常数时间检索最小元素。先回顾栈知识,依示例理解需求,暴力法遍历找最小元素虽可行却破坏栈结构且不满足时间要求,后用空间换时间策略,结构体新增指针记录最小元素,各操作函数按规则实现对应功能,最终达成设计要求,还让我们掌握算法优化与复杂度权衡。!!荆轲刺秦!!!
2025-01-01 15:10:15
989
原创 LeetCode算法题 (比较含退格的字符串)Day9!!!C/C++
本题通过含‘#’号退格字符进行比较,这一问题考验对字符操作和逻辑判断的掌握。双指针法无疑是本题解决问题的关键,希望大家熟练掌握。我们在遇见一个题目时,可以先在脑子里形成一段“伪代码”,之后按照这个思路,一步步的进行代码优化(时间复杂度或空间复杂度上)。在使用malloc时,务必要记得在使用完毕以后,手动释放掉开辟出的内存,避免造成内存泄露。通过这道含退格字符串比较题,深入探索了字符串处理细节与双指针算法精妙之处,从基础的字符判断、指针操作,到复杂的逻辑构建、性能优化,全方位提升编程思维。
2024-12-31 15:28:03
912
原创 LeetCode算法题 (链表的中间结点)Day8!!!C/C++
链表是数据结构中一种存储数据的方式,和数组一样都属于线性表,但链表与数组不同的地方在于数组的每个元素地址都是连续的,而链表的每个元素地址不一定连续,所以在单向链表中会包含一个指针域(存放下一个元素的地址)和一个数据域(当前元素)。注:这里的fast不建议一次直接走完两个节点,因为他如果长度为偶数时,如果这样做会导致fast指针走向最后一个指针的后面也就是空指针,一定要记得在fast走完一个节点后,再加一个if判断当前元素是否为链表的末尾,如果不是在继续走下一个节点。这样,快指针的移动速度是慢指针的两倍。
2024-12-30 16:43:10
2035
原创 LeetCode算法题 (字母异位词分组)Day7!!!C/C++
首先使用map来存储排序后的字符串和其对应的原始字母异位词列表。通过遍历输入的字符串数组,对每个字符串进行排序,然后将其原始形式添加到map中对应的位置。最后,遍历map,将每个键对应的值(即字母异位词组)添加到最终的结果向量ret中并返回。今天我们成功地使用哈希表(或排序 + 映射)解决了 “字母异位词分组” 这一 LeetCode 算法题,深入理解了哈希表在处理这类字符串分组问题中的强大作用,以及排序操作对于识别字母异位词的巧妙应用。
2024-12-29 17:06:01
622
原创 LeetCode算法题 (买卖股票的最佳时机 II)Day6!!!C/C++
函数maxProfit接受一个整数数组指针prices和数组的大小pricesSize作为参数。使用for循环遍历数组prices,每次比较相邻的两个元素prices[i]和。如果prices[i]小于,说明后一天价格上涨,计算并累加利润到变量profit中。最后返回累加后的总利润profit。在关于“买卖股票的最佳时机 II”算法问题我们深入探讨了通过贪心算法解决股票交易获取最大利润的问题。从算法的实现思路到代码的详细解读,希望能帮助大家清晰地理解其内在逻辑。
2024-12-28 16:50:44
1787
原创 LeetCode算法题 (Move Zores(移动零))Day5!!!C/C++
算法的世界广阔而深邃,让我们一起保持探索的热情,不断挖掘其中的奥秘,期待下一次与大家分享更多精彩的算法知识!题解一中的while(true),我在这里其实是非常不建议大家使用的,除非大家是物联网相关专业的同学(这里懂得都懂😁😁😁)。通过实例分析,我的初步想法是先判断数组前后的元素是否为0,如果第一个元素为0,后一个元素不为0,那么我们需要把这两个元素进行交换。通过示例,简单来说就是把为0的元素统统放到数组的右边,不为0的元素统统放到数组的左边。移动到数组的末尾,同时保持非零元素的相对顺序。
2024-12-27 16:43:52
574
原创 LeetCode算法题 (最大子数组和)Day4!!!C/C++
首先我们要确定一个区间,也就是我们要算出哪一部分的和,这里定义出两个变量,一个作为开始(begin),一个作为结束(end)。但是这样写并不能通过本题的所有测试,咱们可以看,这个算法的时间复杂度为 O(N^3),效率非常的低,那么我们需要对这个算法进行一定的优化。可以直接改为这样,去除了最内层的循环后,此时的时间复杂度为O(n^2)。根据示例和题目分析,这道题是让我们求出最大的连续子数组之和,而且最少包含元素,也就是说,假如给定一个数组。那基本框架已经写的差不多了,接下来就需要添加上具体要实现的功能了吧。
2024-12-26 17:02:07
530
原创 LeetCode算法题 (快乐数)Day3!!!C/C++
分别定义两个变量,一个fast,一个slow,fast一次走两个,slow一次走一个,当他们相遇的时候就代表元素出现了循环,我们就直接终止while循环,最后返回判断fast(或slow都可以)是否等于1即可。那么接下来就要分析我们需要把每次的平方和结果记录下来进行比对,看之前是否出现过相同的数字,且数字如果不为1的话,那么这个数就不是我们要找的快乐数,相反就是快乐数字了。n对10进行取余运算的话,就会得到末尾的3,那么我们只需要每一位先取余之后对n进行除以10的操作就可以截去掉最后一位,也就是。
2024-12-25 15:51:26
507
原创 LeetCode算法题 (只出现一次的数字)Day2!!!C/C++
但这样会有一个很严重的弊端,会大大增加时间复杂度 O(n^2)也就是说,如果我的数组元素个数为100的话那么需要遍历的次数就是10000次了,这还仅仅只是100个元素,但需要遍历的次数就已经达到了这个量级。还有一点很重要,就是异或运算其实和咱们的加法运算很相似,异或运算也是可以交换两个操作数的位置的,而且结果不变。,那么就是2^1^2^1^4,这里咱们可以给这些数字手动排序一下,就成了 1^1^2^2^4。,那么现在的式子就变成了,0^0^0^0^4,(第三点相同的元素进行异或就会得到0,)
2024-12-24 16:35:36
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人