- 博客(35)
- 收藏
- 关注
原创 【力扣hot100】【Leetcode 75】颜色分类|快速排序 算法笔记及打卡(21/100)
本文介绍了LeetCode 75题"颜色分类"的解法。题目要求对包含0、1、2的数组进行原地排序,不使用内置排序函数。提供的解决方案采用快速排序算法,通过递归分区实现排序。代码实现中修正了边界条件和类型转换问题,确保正确性。时间复杂度为O(nlogn),空间复杂度为O(1)。文章还提出进阶问题:是否能设计一趟扫描的常数空间算法,暗示可能存在更优解法。整体呈现简洁明了的技术分享风格。
2026-04-21 15:33:11
184
原创 【力扣hot100】【Leetcode 73】矩阵置零|数组遍历 算法笔记及打卡(20/100)
本文介绍了LeetCode第73题"矩阵置零"的解法。题目要求将矩阵中所有0元素所在的行和列全部置为0,并要求使用原地算法。参考解法使用两个数组分别记录0元素的行号和列号,然后统一将这些行和列置零。文章提供了C++实现代码,包括核心解题逻辑和完整的输入输出示例。解法的时间复杂度为O(mn),空间复杂度为O(m+n),适用于中等规模矩阵的处理。
2026-04-21 15:31:16
204
原创 【力扣hot100】【Leetcode 54】螺旋矩阵|边界控制 算法笔记及打卡(19/100)
本文介绍了如何按照顺时针螺旋顺序遍历二维矩阵并返回所有元素。通过设置上下左右四个边界(top,bottom,left,right),依次进行从左到右、从上到下、从右到左、从下到上的遍历。每次遍历完一个方向后,调整相应边界并检查是否越界,若越界则终止循环。该方法时间复杂度为O(mn),空间复杂度为O(1),适用于m×n的矩阵。文中提供了C++实现代码,包括输入处理、螺旋遍历逻辑和结果输出,清晰展示了边界控制的实现过程。
2026-04-21 15:29:42
178
原创 【力扣hot100】【Leetcode 104】二叉树的最大深度|非迭代BFS、迭代DFS两种解法算法笔记及打卡(18/100)
本文讨论了如何求解二叉树的最大深度问题,提供了两种主要解法:DFS递归法和BFS迭代法。DFS递归法通过递归计算左右子树深度取最大值加1;BFS迭代法使用队列进行层次遍历,每处理完一层深度加1。两种方法的时间复杂度均为O(n),其中n为节点数。文章还给出了对应的ACM模式代码实现,包括二叉树构建和测试用例处理。对于空树情况,两种方法都能正确处理并返回深度0。这个问题是理解二叉树遍历和递归思想的经典案例。
2026-04-21 15:28:32
167
原创 【力扣hot100】【Leetcode 48】旋转图像|对称矩阵 矩阵转置算法笔记及打卡(17/100)
本文介绍了如何原地旋转n×n矩阵90度的两种方法。第一种方法通过两次翻转实现:先上下翻转矩阵,再沿主对角线翻转。第二种方法直接交换元素位置,通过外层循环控制旋转层数,内层循环完成每层的四次元素交换。两种方法都满足O(n²)时间复杂度和O(1)空间复杂度的要求。文章提供了C++实现代码,包含输入处理、核心旋转逻辑和输出展示,并解释了swap函数的等价实现。
2026-04-19 13:25:14
348
原创 【力扣hot100】【Leetcode 15】三数之和|暴力枚举 双指针 算法笔记及打卡(16/100)
摘要 LeetCode 15题要求找出数组中所有和为0且不重复的三元组。本文提供了两种解法:暴力三重循环和双指针法。暴力解法通过三层嵌套循环遍历所有可能的三元组,并使用排序和去重优化,但存在超时风险。更优的双指针法先对数组排序,固定一个元素后,使用左右指针在剩余部分寻找匹配的组合,时间复杂度降至O(n²)。两种方法都强调了去重处理,确保结果不包含重复三元组。双指针法是更高效的推荐解法,适合处理大规模数据。
2026-04-19 13:24:11
200
原创 【力扣hot100】【Leetcode 3】无重复字符的最长子串|集合 双指针 算法笔记及打卡(13/100)
这道题要求找出字符串中不包含重复字符的最长子串长度。使用滑动窗口和哈希集合的解法:维护一个窗口,右指针不断扩展,当遇到重复字符时,左指针移动并删除集合中的元素,直到窗口内无重复。窗口大小即为当前无重复子串长度,记录最大值即可。时间复杂度O(n),空间复杂度O(字符集大小)。示例代码展示了C++实现,使用unordered_set来检测重复,通过移动左右指针维护有效窗口。
2026-04-19 13:22:29
350
原创 力扣HOT100:T.1 两数之和|循环遍历算法笔记及打卡(15/100)
本文介绍了LeetCode第一题"两数之和"的解法。题目要求在给定数组中找到两个数,使其和等于目标值,并返回它们的下标。采用双重循环的暴力解法:外层循环遍历每个元素作为第一个加数,内层循环查找是否存在与之匹配的第二个加数(目标值减第一个数)。时间复杂度为O(n²)。文章提供了C++实现代码,包含核心解法及完整输入输出示例,帮助理解题目要求和实现细节。该解法直观易懂,适合初学者掌握数组遍历和基本算法思想。
2026-04-17 16:39:27
96
原创 【数据分析 | 农业项目】蔬菜类商品的自动定价与补货决策 | Tableau & Excel
本项目通过以往顾客对不同种类的蔬菜的需求情况和供货商对生鲜超市的蔬菜供应情况,用数据分析的相关手段,来进行相关分析。2027.6.30前,谢绝转载
2026-04-17 16:35:18
117
原创 【数据分析 | 金融项目】阿里巴巴服务类商品用户行为和品类分析
本项目基于阿里巴巴服务类商品11-12月用户行为数据,分析双12活动期间的流量变化和用户行为特征。通过Python和Pyecharts进行数据处理和可视化,发现双12流量主要集中在11-12日,前期预热不足导致UV增长有限;PV波动显著大于UV,显示活动引流效果明显但用户留存不足;13日后流量回落至略高于活动前水平。分析还包括用户时段行为偏好、转化率漏斗和品类排名,为优化活动预热方案、精准投放时段和提升转化率提供数据支持。
2026-03-04 15:05:06
819
原创 力扣HOT100:T.75 颜色分类|快速排序法算法实现笔记及打卡(14/100)
摘要 LeetCode 75题要求对表示红、白、蓝三色的0、1、2数组进行原地排序。本文提供了快速排序的解决方案,通过选取中间值作为基准,将数组分为小于和大于基准的两部分,然后递归排序。代码实现了经典快速排序算法,时间复杂度为O(nlogn)。文章还简要介绍了快速排序的基本思想:选择哨兵,分区交换,递归处理。最后指出极端情况下时间复杂度可能退化到O(n²),并提示后续将详细讲解更多排序算法。
2026-02-26 23:51:32
429
原创 力扣HOT100:T.121 买卖股票的最佳时机|辅助数组法算法实现笔记及打卡(13/100)
本文介绍了LeetCode121题"买卖股票的最佳时机"的解法。题目要求在给定的股票价格数组中,找到某天买入并在之后某天卖出能获得的最大利润。通过维护一个最低买入价变量buy,遍历数组时更新buy,并计算当前卖出价与buy的差值作为利润,记录最大值。算法时间复杂度为O(n),空间复杂度O(1)。示例展示了如何通过一次遍历找到最大利润5的过程。
2026-02-26 23:37:20
532
原创 深入浅出程序设计竞赛(基础篇)-第七章C++代码及笔记
程序设计竞赛基础篇第七章代码摘要 本章展示了C++在程序设计竞赛中的基础应用,包含多个典型算法实现: 几何计算:7-1计算三角形周长,演示了欧几里得距离公式的使用 质数判断:7-2实现is_prime函数判断数组中的质数 闰年计算:7-3通过模块化编程处理日期范围问题 统计函数:7-4展示数组参数传递和统计技巧 字符串处理:7-6实现字符串转大写函数 递归算法:7-7用递归计算阶乘 分治算法:7-8解决矩阵分块赦免问题 这些示例涵盖了函数定义、参数传递、递归调用等核心编程概念,适合竞赛编程入门学习。
2026-02-25 15:33:53
602
原创 深入浅出程序设计竞赛(基础篇)-第六章C++代码及笔记
本文介绍了C++中字符串处理的基础知识,包含五个编程实例:1) 字符大小写转换的两种实现方法;2) 凯撒密码的字符偏移处理;3) 统计字母出现频率并判断质数差;4) 多行算式处理的输入输出技巧;5) 字符串长度统计。示例代码演示了字符数组操作、getchar/putchar使用、strlen/strcpy/strcmp等字符串函数,以及fgets/sscanf/sprintf等高级输入输出方法。文中还提供了详细的代码注释,帮助理解字符串处理的基本概念和常见操作。
2026-02-25 15:26:55
922
原创 深入浅出程序设计竞赛(基础篇)-第五章C++代码及笔记
本文展示了《深入浅出程序设计竞赛(基础篇)》第五章的C++代码实现,包含多个数组处理案例。主要内容包括:5-1统计鱼的可爱的比较次数;5-2反向输出数组元素;5-3实现3n+1问题并逆序输出;5-4计算移除地铁区域后的剩余树木;5-5寻找成绩相当的对手对数;5-6统计地毯覆盖次数;5-7三维立方体切割模拟。这些案例涵盖了数组遍历、多维数组操作等基础编程技巧,适合程序设计竞赛初学者练习。
2026-02-22 15:52:24
658
原创 力扣HOT100:T.42 接雨水|辅助数组法or双指针法算法实现笔记及打卡(12/100)
摘要:LeetCode 42题"接雨水"要求计算柱子排列能接多少雨水。文章介绍了两种解法:1) 辅助数组法,通过预处理左右最大值数组,计算每个位置的接水量,时空复杂度均为O(n);2) 优化的双指针法,实时维护左右最大值,空间复杂度优化为O(1)。两种方法都基于"木桶效应"原理,即接水量由左右最大高度中的较小值决定。代码示例展示了两种实现方式,其中双指针法通过动态更新边界值提高了空间效率。
2026-02-22 15:41:29
798
原创 深入浅出程序设计竞赛(基础篇)-第四章C++代码及笔记
本文展示了程序设计竞赛基础篇第四章的多个C++代码示例,涵盖了循环结构、条件判断、数组处理等基础编程概念。示例包括:苹果计数程序(4-1)、寻找最小值(4-2)、分组求和(4-3)、天数计算(4-4)、猜数字游戏(4-5)、数字金字塔(4-6)、阶乘求和(4-7)、数字出现次数统计(4-8)以及调和级数问题(4-9)。这些代码示例演示了如何解决不同类型的编程问题,并附有简要说明和注意事项,如随机数生成、循环优化等技巧。
2026-02-21 15:45:32
340
原创 深入浅出程序设计竞赛(基础篇)-第三章C++代码及笔记
本文摘要整理了《深入浅出程序设计竞赛(基础篇)》第三章的9个C++代码示例,主要涵盖了基础编程概念和逻辑判断的实现。内容包括:关系运算符使用(3-1)、逻辑运算组合(3-2)、闰年判断(3-3)、条件分支语句(3-4/3-5)、switch-case应用(3-6)、BMI计算与分类(3-7)、三数排序(3-8)以及月份天数计算(3-9)。这些示例代码展示了C++中基本的输入输出、条件判断和逻辑运算的应用,适合初学者学习编程基础。
2026-02-21 15:40:45
389
原创 力扣HOT100:T.21 合并两个有序链表|双指针法算法实现笔记及打卡(11/100)
摘要: 本文介绍了如何合并两个升序链表为一个新的升序链表。使用双指针法遍历两个链表,比较节点值大小依次连接较小节点,最后将剩余节点直接接入结果链表。算法时间复杂度为O(m+n),空间复杂度O(1)。关键点在于创建哑节点简化操作,通过指针比较和移动完成合并,适用于处理有序链表的合并问题。
2026-02-20 21:06:17
510
原创 力扣HOT100:T.287 寻找重复数|快慢指针法算法实现笔记及打卡(10/100)
本文介绍了一种使用快慢指针法在数组中寻找重复数的高效解决方案。题目要求在不修改数组且使用常量空间的情况下,找出唯一重复的数字。通过将数组视为链表(下标映射到值),重复数会导致链表出现环。快慢指针先检测环的存在,然后将慢指针重置到起点,两指针同速前进直到相遇点即为重复数。该方法时间复杂度O(n),空间复杂度O(1),巧妙地将数组查找问题转化为链表环检测问题。
2026-02-20 14:56:57
748
原创 力扣HOT100:T.283 移动零|双指针法算法实现笔记及打卡(9/100)
摘要: 本文介绍了LeetCode 283题“移动零”的解法。题目要求将数组中的零元素移动到末尾,同时保持非零元素的相对顺序,且必须原地操作。采用双指针法:左指针标记非零区间边界,右指针遍历数组。当右指针遇到非零元素时,与左指针交换并移动左指针。时间复杂度O(n),空间复杂度O(1)。
2026-02-19 23:11:23
382
原创 力扣HOT100:T.234 回文链表|双指针法算法实现笔记及打卡(8/100)
本文介绍了如何判断单链表是否为回文链表。通过双指针法找到链表中间节点,将后半部分链表反转后与前半部分逐一比较。具体步骤为:1)使用快慢指针定位中点;2)反转后半段链表;3)比较前后两段节点的值。该方法满足O(n)时间复杂度和O(1)空间复杂度的要求。示例代码展示了完整的实现过程,包括链表反转和双指针遍历操作,最终返回比较结果。这种解法高效地解决了回文链表判断问题。
2026-02-19 23:07:00
434
原创 力扣HOT100:T.206 反转链表|2019年408代码真题|双指针法算法实现笔记及打卡(7/100)
本文介绍了反转链表的两种解法:迭代法和递归法。迭代法通过双指针(pre和cur)遍历链表,逐个反转节点指向;递归法则利用递归到达链表末端后,回溯过程中反转节点连接。两种方法的时间复杂度均为O(n),空间复杂度迭代法为O(1),递归法为O(n)。此外,文章还延伸介绍了2019年考研真题中的链表重排问题,对比了暴力头插法(O(n²))和优化的快慢指针法(O(n)),后者通过链表拆分、反转和合并实现高效重排。
2026-02-18 16:23:35
314
原创 力扣HOT100:T.49 字母异位词分组|排序法算法实现笔记及打卡(6/100)
本文介绍了两种解决字母异位词分组问题的方法。第一种是排序法,通过将每个字符串排序后作为特征值,然后遍历比较特征值相同的字符串进行分组。第二种是更高效的哈希表法,利用哈希表存储排序后的字符串及其对应的分组索引,时间复杂度为O(nklogk),其中n是字符串数量,k是字符串最大长度。两种方法都能正确地将字母异位词分组,但哈希表法的实现更为简洁高效。
2026-02-18 16:08:59
358
原创 力扣HOT100:T.160 相交链表|2012年408代码真题|双指针法or辅助数组法算法实现笔记及打卡(5/100)
摘要: 题目要求找出两个单链表的相交起始节点。最优解法采用双指针法,通过让指针A和B分别遍历两个链表后切换到对方链表,消除长度差,最终在相交节点或nullptr处相遇。时间复杂度O(m+n),空间复杂度O(1)。暴力解法使用辅助数组存储链表A节点地址,再遍历链表B查找匹配地址,时间复杂度O(m+n),空间复杂度O(m)。双指针法更高效,无需额外空间。
2026-02-17 14:17:14
696
原创 力扣HOT100:T.136 只出现一次的数字|位运算(异或)算法实现笔记及打卡(4/100)
本文探讨了LeetCode 136题"只出现一次的数字"的两种解法。初始解法使用双重循环暴力搜索,时间复杂度为O(n²)。更优解法利用位运算中的异或特性:任何数与自身异或结果为0,与0异或结果为自身,且异或满足交换律。通过遍历数组将所有数字异或,最终结果即为只出现一次的数字。该解法时间复杂度O(n),空间复杂度O(1),完美满足题目要求。位运算解法简洁高效,展示了异或运算在算法中的巧妙应用。
2026-02-17 13:50:12
227
原创 力扣HOT100:T.128 最长连续序列|排序扫描法算法实现笔记及打卡(3/100)
摘要 本文讨论了LeetCode 128题"最长连续序列"的两种解法。作者首先提出了排序扫描法,通过排序数组后扫描统计连续序列长度,实现了O(nlogn)时间复杂度的解法。该方法处理了重复元素情况,在测试中表现优异。随后介绍了参考解法使用哈希表实现O(n)时间复杂度,通过检查序列起点并扩展序列长度。两种方法各具特色,排序法简单直观但时间复杂度略高,哈希表法则更高效但实现稍复杂。作者在解决中档题后表达了成就感,并分享了测试结果截图。
2026-02-16 22:15:07
227
原创 深入浅出程序设计竞赛(基础篇)-第二章C++代码及笔记
本文展示了《深入浅出程序设计竞赛(基础篇)》第二章中的12个C++编程练习示例,涵盖了基础数学运算、字符处理、变量交换、时间计算等内容。每个示例包含完整的代码实现,部分题目提供多种解法(如暴力解法、优化解法或C语言解法)。笔记部分特别解释了字符类型在C++中的处理方式(ASCII码转换)以及宏定义的正确使用方法。这些练习涉及常见编程技巧如类型转换、浮点数处理、数学公式实现等,适合初学者学习基础语法和算法思维。
2026-02-16 22:13:19
499
原创 力扣HOT100:T169多数元素 计数法or哈希表法or摩尔投票法or排序法四种方法实现算法笔记&打卡(2/100)
本文介绍了LeetCode 169题"多数元素"的四种解法。题目要求找出出现次数超过数组长度一半的元素。计数法通过排序后统计元素出现次数;摩尔投票法利用票数抵消原理,空间复杂度O(1);哈希表法记录元素频次;排序法直接取中间元素。其中摩尔投票法最优,满足O(n)时间复杂度和O(1)空间复杂度要求。每种方法都给出了对应的代码实现,并附有示意图解释摩尔投票法的原理。
2026-02-15 10:59:43
420
原创 力扣HOT100:T94二叉树的中序遍历迭代与递归法实现算法笔记&打卡(1/100)
摘要:本文介绍了二叉树中序遍历的两种实现方法。递归法按照"左-根-右"顺序遍历,通过辅助函数递归处理左右子树。迭代法使用栈模拟递归过程,先将左子树节点全部入栈,再处理根节点值,最后转向右子树。两种方法的时间复杂度均为O(n),其中递归法空间复杂度为O(n)(递归调用栈),迭代法显式使用栈结构。文章包含详细代码注释和图示说明,适合理解二叉树遍历的基本原理和实现方式。
2026-02-15 10:52:47
265
原创 对于洛谷P3397题参考代码的一点思考
摘要:洛谷P3397题要求统计n×n网格上每个点被m个矩形地毯覆盖的次数。原解法使用双重循环直接标记覆盖区域,但当n>50时数组越界导致错误。改进方案仅需将数组大小从MAXN=55调整为MAXN=1001即可通过所有测试用例。虽然时间复杂度仍为O(mn²),但解决了边界问题。作者指出教材中提到的二维前缀和方法对初学者可能过于复杂,建议优先掌握基础实现后再进行优化。
2026-02-14 14:43:37
585
原创 深入浅出程序设计竞赛(基础篇)-第一章C++代码及笔记
本文是《深入浅出程序设计竞赛(基础篇)》第一章的代码示例合集,包含11个基础C++编程练习。内容涵盖基本运算、变量使用、数学计算等入门知识,如加减乘除运算、浮点数处理、圆周率计算、猴子吃桃问题等。特别包含1-4课后习题的完整解答,涉及变量命名规则、数学应用题(如鸡兔同笼、存款利息计算等)。代码注释详细,适合初学者理解基础语法和算法思维。所有示例均使用标准C++编写,展示了编程竞赛中的基础问题解决方法。
2026-02-14 14:03:17
561
原创 大数据分析学习路径(笔记整理)
本文系统介绍了大数据学习流程与技术体系,包含数据采集、存储、计算和应用四个核心环节。基础技能包括Java、Scala等编程语言和Linux系统。数据采集涉及Flume、Kafka等工具,存储采用HDFS、HBase等分布式系统。计算部分区分离线(Hive、Spark)和实时(Flink)处理,涵盖数据仓库建模、调度等。应用层包含多维分析工具(ClickHouse、Doris)和报表系统(Superset)。完整技术栈覆盖大数据处理全生命周期,为构建企业级数据平台提供参考架构。
2026-02-12 17:12:40
774
转载 Hive SQL 优化问题(笔记总结)
Hive SQL优化的7个关键点:1)使用分区裁剪和列裁剪减少数据扫描;2)优化COUNT DISTINCT和GROUP BY操作;3)利用谓词下推提前过滤数据;4)合理使用分区和分桶;5)调整MapReduce任务参数;6)减少JOB数量;7)优化JOIN操作,包括MapJoin、数据过滤和数据倾斜处理。针对每个优化点提供了具体实现方法和示例代码,如分区表查询优化、COUNT DISTINCT改写为GROUP BY等。这些优化措施能显著提升Hive查询性能,特别是在处理大数据量时效果更为明显。
2026-02-12 17:04:30
43
翻译 iText2KG:使用大型语言模型构建增量知识图谱(安装、使用中文指导)
iText2KG 是一个 Python 软件包,旨在通过利用大型语言模型从文本文档中提取实体和关系,逐步构建一致的知识图谱。它具备零样本学习能力,可以在无需特定训练的情况下实现跨领域的知识提取。该软件包包括文档提炼、实体提取和关系提取模块,确保提取的实体和关系是唯一且已解析的。iText2KG 能够随着新文档的加入持续更新知识图谱,并将其集成到 Neo4j 中进行可视化展示。
2024-11-30 17:50:50
741
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅