- 博客(26)
- 收藏
- 关注
原创 我的 LeetCode 日记:Day 10 - 回归基础,栈与队列的巧妙应用
在开始之前,我先阅读了关于栈与队列的理论基础。通过用栈模拟队列、用队列模拟栈,我加深了对它们 LIFO 和 FIFO 本质的理解。而后的两个经典应用题,则让我看到了栈在处理“匹配”和“消除”类问题上的天然优势。但今天的学习,让我从更深层次的角度去理解它们的本质,并领略了它们在解决特定问题上的巧妙和高效。今天的核心是:理解栈的“后进先出”(LIFO)和队列的“先进先出”(FIFO)特性,并通过相互模拟和经典应用题来加深这种理解。: 请你仅使用队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(
2025-08-19 14:16:52
419
原创 我的 LeetCode 日记:Day 9 - 字符串终章与 KMP 算法
今天,我迎来了字符串章节的收官之日。如果说昨天的内容是基础操作的热身,那么今天就是一场真刀真枪的算法硬仗。字符串章节的学习,特别是 KMP 算法,是一次智力上的巨大挑战和享受。(反转、二分查找、N数之和),其思想都是通过两个指针的协同移动,将 O(n²) 的问题降维到 O(n)。今天的学习强度很大,尤其是 KMP 算法,正如 Carl 哥所说,需要“硬啃”。从基础的双指针操作,到复杂的 KMP 算法,我掌握了一套完整的字符串处理工具链。: 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。
2025-08-18 17:07:19
566
原创 我的 LeetCode 日记:Day 8 - 开启新篇章,字符串操作基础
字符串章节的第一天,我复习并加深了对双指针法在反转问题中应用的理解,并通过分段反转锻炼了对复杂循环和边界的处理能力。更重要的是,通过替换问题,我理解了在不同语言环境下(可变 vs 不可变字符串),处理原地修改问题的思维差异。这是一个既基础又重要的话题,几乎所有的编程场景都离不开对字符串的处理。在 Python 中,最直接的方法是遍历字符串,构建一个新的列表,遇到数字就添加 “number”,否则就添加原字符,最后用。输入字符串以字符数组。,这对空间复杂度的控制和指针的精细操作提出了更高的要求。
2025-08-18 12:08:53
424
原创 我的 LeetCode 日记:Day 7 - 攻克哈希表,k-Sum 问题大作战
哈希表是实现“空间换时间”最强大的工具。当我发现一个问题用暴力解法时间复杂度太高时,我总会问自己:是否能用一个哈希表来预存一些计算结果,从而降低后续的查找时间?从 2-Sum 到 3-Sum 再到 4-Sum,这一系列问题是面试中的常客,也是理解哈希表与双指针两种解法如何权衡的绝佳案例。没有最好的算法,只有最适合当前问题场景的算法。”这一重要的编程思想,并理解在不同约束下,应该选择哪种最优的解题策略。专题让我对算法选择有了更深的理解。,专门攻克其中非常经典的一类问题——问题是算法面试中的经典。
2025-08-18 11:34:51
545
原创 我的 LeetCode 日记:Day 38 - 背包问题大结局
经过前几天的学习,我对 0/1 背包和完全背包已经有了比较深入的理解。今天的任务是继续探索完全背包的应用,解决“求最小值”而非“求最大价值”或“求组合数”的问题,并初步了解背包家族的最后一位成员——多重背包。例如,一个数量为 3、重量为 2、价值为 5 的物品,我可以把它看成是三个独立的、重量为 2、价值为 5 的物品,然后用 0/1 背包的解法来做。带着这份沉甸甸的收获,我将继续向动态规划的更深处探索。最后,我将对整个背包问题进行一次系统性的总结,将这些宝贵的知识沉淀下来。的完全平方数的最少数量。
2025-08-15 11:37:44
718
原创 我的 LeetCode 日记:Day 37 - 解锁动态规划:完全背包问题
这个看似微小的改动,却对状态转移方程和代码实现,尤其是一维空间优化,产生了深刻的影响。在掌握了 0/1 背包之后,今天我将能力升级,开始学习动态规划中的另一大经典模型——用新的视角重看旧问题,也让我对 DP 模型的理解更加深入。这个“上一行”的状态转移而来。这一个小小的遍历顺序,就是区分两种背包问题的关键所在。今天我彻底搞清楚了完全背包和 0/1 背包的核心区别——更重要的是,我学会了通过调整内外层循环的顺序,来解决。学习完全背包,关键是和 0/1 背包进行对比。: 在 0/1 背包中,状态转移方程是。
2025-08-14 18:50:41
863
原创 我的 LeetCode 日记:Day 36 - 动态规划,背包问题的千变万化
数组的定义(求最大重量、求组合数、求可行性)和状态转移的方式,它可以解决各种各样的问题。识别问题背后的背包模型,并正确地进行转化,是解决这类 DP 问题的关键所在。昨天,我初步掌握了 0/1 背包问题的理论基础和标准解法。今天的几道题,乍一看和背包没什么关系,但通过巧妙的数学转化,它们的核心都变成了 0/1 背包问题。——将一个看似全新的问题,转化为我们熟悉的模型来求解。为了加深理解,我对每个适用的问题都同时实现了二维和一维的解法,以观察它们之间的联系和区别。,是背包问题的一个重要变种。
2025-08-13 19:34:33
843
原创 我的 LeetCode 日记:Day 35 - 解构动态规划,初探 0/1 背包问题
0/1 背包问题描述的是:有一堆物品,每个物品都有自己的重量和价值,还有一个容量有限的背包。问题是,如何在不超过背包总容量的前提下,选择物品,使得装入背包的物品总价值最大?这里的 “0/1” 指的是,对于每个物品,你要么不选(0),要么选(1),不能只选一部分。的空间优化和倒序遍历的精髓,是理解背包问题的关键。更令我兴奋的是,学会了如何将一个看似无关的问题(如分割子集),巧妙地转化为背包模型来求解。: 这是一道非常精彩的 0/1 背包应用题。,因为容量为 0 的背包,什么都不装,就算是被“装满”了。
2025-08-12 13:39:33
767
原创 代码随想录算法训练营 DAY34|动态规划2
从一维到二维,再到更抽象的状态定义,万变不离其宗的还是“五部曲”。动态规划的第二天,我开始真正感觉到它的威力了。告别了昨日线性的一维问题,今天我正式进入了二维的世界。起初我以为会难度陡增,但在“五部曲”方法论的指引下,我发现从一维到二维的跨越,其实是一个非常自然的过程。今天我也挑战了两道被标记为“可跳过”的难题,虽然不容易想,但理解其思路后,对 DP 的状态定义和转移有了更深的认识。机器人试图达到网格的右下角。今天的“不同路径”系列问题,是练习二维 DP 的绝佳材料。正整数的和,并使这些整数的乘积最大化。
2025-08-11 12:38:51
881
原创 代码随想录算法训练营 DAY32|初探动态规划,从“五部曲”开始
关键在于彻底摒弃“凭感觉”的解题方式,严格遵循“五部曲”的逻辑框架。这个框架就像一个脚手架,帮助我在面对看似复杂的问题时,能够有条不紊地进行分析和构建。虽然今天都是基础题,但这种结构化的思维方式,无疑是未来攻克更难 DP 问题的最宝贵财富。他所讲授的 DP “五部曲”,是贯穿整个章节所有题目的核心方法论。一旦你支付了相应的体力花费,你就可以选择向上爬一个或两个阶梯。动态规划的核心思想,是将一个复杂问题分解成更小的、重叠的子问题。通过求解子问题的最优解,并将其存储起来,最终推导出原问题的最优解。
2025-08-09 18:15:19
613
原创 代码随想录算法训练营 DAY31|贪心算法终章
我完成了最后几道具有代表性的题目,并花了大量时间来回顾、总结,力求将这些天学到的思想和策略内化于心。贪心算法的旅程即将结束,它带给我的不仅仅是解题技巧,更是一种看待问题的独特视角。在求最优解的问题中,贪心永远是值得最先尝试的思路。它的简洁与高效,正是算法的魅力所在。今天的核心任务是:解决最后的几道难题,并输出一份能够指导我未来学习的、系统性的贪心算法总结。的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增的。经过这几天的学习,我构建了自己对贪心算法的理解框架。排序的目的,决定了后续的一切。
2025-08-08 16:11:07
870
原创 代码随想录算法训练营 DAY30|贪心算法4
通过一个巧妙的排序规则(通常是按区间结尾),可以将一个复杂的问题转化为一个简单的线性扫描问题。虽然它没有固定的模板,但其中蕴含的解题智慧,如“局部最优”、“解耦约束”、“排序简化问题”等,都是非常宝贵的财富。但只要做过一次,理解了其中的贪心策略,这类问题就变得清晰明了。今天的三道题,让我对处理区间问题的信心大增。这几道题都有一个共同的特点:初看时觉得条件复杂,不知从何下手,但一旦看到贪心解法,便会忍不住惊呼:“原来可以这么巧妙!: 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
2025-08-07 11:03:03
724
原创 代码随想录算法训练营 DAY29 |贪心算法3
个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。2. 相邻的孩子中,评分高的孩子必须获得更多的糖果。它没有固定的模板,但有很多通用的思想,比如“局部最优推导全局最优”、“通过排序解耦约束”等等。我相信这些思想会在我未来的算法学习中,尤其是动态规划部分,提供重要的参照和启发。你有一辆油箱容量无限的汽车,从一个加油站开往另一个加油站。如果可以,则返回出发时加油站的编号,否则返回 -1。这种“解耦”思想,通过巧妙的排序先满足一个维度,从而让另一个维度上的贪心选择变得简单明了。
2025-08-06 11:39:35
651
原创 代码随想录算法训练营 DAY28 |贪心算法2
重点不是自己能否独立想出那个“贪心策略”,而是能否理解它、吸收它,并能在未来遇到类似问题时,多一个思考的维度。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。贪心算法的第二天,我更加体会到它的“不拘一格”。贪心算法的第二天,我更加深刻地体会到了这个算法系列的“野路子”风格。今天的题目,尤其是“跳跃游戏”系列,完全不是按部就班的套路,而是需要灵光一现的巧妙思路。数组中的每个元素代表你在该位置可以跳跃的最大长度。中的元素,将数组中的某个元素。
2025-08-05 17:14:19
1000
原创 代码随想录算法训练营 DAY22 |回溯算法1
回溯法是一种暴力搜索算法,但它非常“聪明”,懂得在走到“死胡同”时退回来,去尝试其他的路。它就像是在一个巨大的决策树上进行深度优先的探索,寻找所有可能的解。开始前我还有些忐忑,但跟随 Carl 哥的讲解,我发现回溯算法其实有非常清晰的模板可循,这让我信心大增。在深入编码前,我花时间彻底理解了回溯算法的理论基础。今天收获巨大,为了系统化这些知识,我整理了一份要点总结,把这些“组合”类问题的共性与差异都梳理了一遍。的正整数,并且每种组合中不存在重复的数字。的字符串,返回所有它能表示的字母组合。
2025-08-04 15:31:16
1040
原创 代码随想录算法训练营 DAY27 |贪心算法入门
贪心的本质是相信局部最优能够导出全局最优。这需要证明,但在解题时,我们往往是先靠直觉找到一个贪心策略,然后尝试举例验证。如果一个问题能用贪心解决,那它的效率通常会很高。
2025-08-04 11:39:20
808
原创 代码随想录算法训练营 DAY5 |哈希表
如果说数组和链表是数据结构的“一体两面”,分别代表着连续与离散存储,那么哈希表就是一种全新的“降维打击”工具,它用一种巧妙的映射思想,为我们带来了极致的查找效率。哈希表的第一天,我深刻感受到了它在优化查找效率上的巨大威力。无论是用数组、Set还是Map,核心思想都是用空间换时间,将查找的复杂度从。: 两个不同的 key 经过哈希函数后得到了相同的索引。如果一个数是快乐数,那么它所有数位的平方和,最终会等于 1。: 将任意大小的输入(key)转换为固定大小输出(哈希值/索引)的魔法函数。都是哈希思想的载体。
2025-07-14 17:25:17
817
原创 代码随想录算法训练营 DAY4 |链表(交换、快慢指针与环形检测)
如果说昨天的链表练习是入门,那今天就是真正的进阶了。今天的任务列表充满了经典的难题,每道题都像一个精巧的谜题,解开它不仅需要代码能力,更需要巧妙的算法思维。指针的交错飞舞,让我深刻感受到了链表的魅力。: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。今天的练习让我对链表的理解又上了一个台阶。的各种高级应用,尤其是在快慢指针和环形链表上的应用,非常烧脑但收获巨大。: 给定一个链表,返回链表开始入环的第一个节点。链表章节的总结,我也会参考 Carl 哥的文章,整理出自己的框架。
2025-07-14 14:45:22
798
原创 用LangChain和Streamlit,三小时复刻出一个“AI数据分析师”,让你的Excel数据开口说话!
作为一名正在探索大语言模型(LLM)世界的小白,我总想着能否做一个既酷炫又实用的项目,来检验自己的学习成果。在我们的工作和学习中,很多人都面临这样的场景:手里有一份数据(比如产品销售记录、用户行为日志、运营数据等),我们知道这里面有宝藏,但要挖出来却不容易。它让我们能像搭乐高一样,把LLM、工具、数据源快速地**链接(Chain)**在一起,把我们的精力聚焦在业务逻辑的创新上。代码跑通了,但我们更要理解背后的“为什么”,这才是真正的学习。最后一步,就是把用户的提问“喂”给我们创建好的Agent。
2025-07-14 10:16:58
1355
原创 代码随想录算法训练营 DAY3 |初探链表
那链表就是由指针串联起来的“独栋别墅”,分布在内存的各个角落,靠“门牌号”(指针)找到下一家。链表的第一天,感觉打开了新世界的大门。指针的操作虽然比数组索引要复杂,但也更加灵活。今天的任务是打好链表的基础,通过三道经典题目,掌握最核心的增、删、改、查以及反转操作。和数组一样,在动手之前,我先认真学习了链表的理论知识。: 理解这两者的根本差异和应用场景,是学好数据结构的关键第一步。的核心都是先通过循环找到要操作节点的前一个节点。变量的维护,这是确保索引边界判断正确的关键。,请你反转链表,并返回反转后的链表。
2025-07-11 11:38:00
700
原创 代码随想录算法训练营 DAY2 |滑动窗口与螺旋矩阵
两天的数组专题刷下来,感觉对数组的认识提升了一个档次。从基础的二分查找到精巧的双指针、滑动窗口,再到实用的前缀和,每一种方法都对应着一类问题。我深刻体会到,数据结构与算法的学习,就是不断积累这些优质的“思维模型”。按照 Carl 哥的建议,如果对某个算法没接触过,直接看视频讲解是最高效的,可以避免自己钻牛角尖浪费时间。今天的题目感觉技巧性更强了,不再是简单的遍历,而是需要用到一些非常巧妙的思维模型,比如。除了 LeetCode 的主线任务,我还完成了两个 Kamacoder 的题目,专门练习。
2025-07-10 14:45:36
949
原创 代码随想录算法训练营 DAY1 |二分查找和双指针
数组在内存中是连续存储的,这个特性是它能够支持快速随机访问(通过索引)的根本原因,也是二分查找等算法高效执行的前提。按照计划,今天的核心任务是掌握数组的理论基础,并死磕几道经典的 LeetCode 题目。对数组的理解更深了一层,对二分查找的两种写法和双指针的多种应用场景都变得更加熟练。二分查找听起来简单,但细节是魔鬼,尤其是区间的开闭问题,很容易让人头晕。说实话,数组既熟悉又陌生,总觉得它很简单,但深究起来,无论是内存原理还是各种花式操作,都大有文章。它们都是二分查找的变种,很好的练习。
2025-07-09 16:06:42
688
原创 【AI大模型通关秘籍】我的提示词工程19式进阶笔记 (萌新也能懂的保姆级教程)
本文分享了从入门到进阶的大语言模型提示词工程技术,涵盖19个核心技巧。第一阶段介绍四大基础方法:零样本提示(直接给出任务)、少样本提示(提供示例)、方向性刺激提示(用关键词引导风格)和元提示(设定AI角色)。第二阶段提升推理能力,包括链式思考(分步解题)、生成知识(先激活背景知识)、提示链(分解复杂任务)、自我一致性(多次推理投票)和思维树(多路径头脑风暴)。这些方法由浅入深,帮助用户更高效地与大模型互动,获得更精准、优质的输出。文章采用通俗易懂的比喻和示例,适合AI初学者快速掌握提示词工程精髓。
2025-06-05 15:48:38
1337
原创 从零到一:用 FastAPI + WebSocket 搭建你的实时 DeepSeek AI 聊天助手 (保姆级教程)
大家好!最近大语言模型 (LLM) 风靡全球,无论是 ChatGPT、Claude 还是国内的各种优秀模型,都展示了 AI 惊人的能力。你是否也曾想过,搭建一个属于自己的、能够实时对话的 AI 聊天应用呢?今天,我就将手把手带你,使用 FastAPI (一个高性能的 Python Web 框架)、WebSockets (实现实时双向通信) 以及 DeepSeek (一个强大的国产 AI 模型) 的 API,构建一个拥有炫酷科技感界面、支持 Markdown、并且能够流式输出的 AI 聊天助手!本文的目标是保
2025-05-28 11:34:40
1618
1
原创 Transformer入门2-干货、代码
Transformer 模型本质上都是,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,也就是说,训练这些 Transformer 模型完全不需要人工标注数据。我们通常还会采用方法,使用特定任务的标注语料,以有监督学习的方式对预训练模型参数进行微调 (fine-tune),以取得更好的性能。
2025-05-22 16:04:03
1558
转载 Transformer入门1-菜鸟系列
本文概述了自然语言处理和统计语言模型的发展历程。自然语言处理经历了从基于规则到统计方法的转变,最终发展为以神经网络为主的深度学习方法。统计语言模型方面,从早期的N-gram模型发展到NNLM、Word2Vec等神经网络模型,再到能处理多义词的ELMo模型,最终演变为采用Transformer结构的BERT模型。BERT通过双向语言模型和预训练-微调框架,在多项任务中取得突破,成为这一阶段的集大成者。文章展现了自然语言处理技术如何通过不断改进前人工作而逐步发展成熟。
2025-05-21 17:03:38
56
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人