- 博客(30)
- 收藏
- 关注
原创 python做题日记(19)
摘要:本文解析了两个算法问题。第41题要求在未排序数组中寻找缺失的第一个正数,采用原地置换方法将数值x放在x-1位置,最终遍历数组找出第一个不匹配位置即为结果。第42题计算柱子阵列能接住的雨水量,使用双指针法,比较左右最大高度差来累加可接雨水,时间复杂度O(n)。两个问题都展示了数组处理的经典思路,分别通过位置映射和高度对比来实现高效求解。
2025-06-18 11:22:16
251
原创 python做题日记(18)
文章摘要:两题均使用回溯算法解决组合求和问题。第39题允许重复使用元素,递归时保持当前索引i;第40题要求每个元素仅用一次,需先排序数组,递归时索引设为i+1,并通过跳过相同值避免重复组合。关键区别在于元素复用性和去重处理,核心都是通过path记录组合、total跟踪和值,当total=target时保存结果,超过则剪枝回溯。
2025-06-16 13:20:46
373
原创 python做题日记(17)
摘要:本文介绍了两种算法题的解法。第一题是数独求解,采用递归回溯法:检查函数验证数字合法性,回溯函数遍历空格尝试1-9数字并递归验证。优化后通过预先记录行、列、宫格数字集合来提升效率。第二题是生成外观数列,通过迭代方式统计前一项中各数字的连续出现次数,将次数+数字;组合成新项。两个解法都体现了递归和迭代的思想,并通过预处理数据优化了性能。代码实现展示了Python中回溯算法的应用和字符串处理技巧。
2025-06-14 12:12:42
339
原创 python做题日记(16)
文章摘要: 第35题要求在有序数组中找到目标值或应插入位置,使用二分查找实现O(logN)时间。若未找到目标值,最终左指针位置即为应插入位置。 第36题验证数独有效性,通过行、列、九宫格三个集合检测重复数字。双重循环遍历数独,若有重复则无效,否则有效。 两题均通过高效数据结构和算法解决问题,分别体现二分查找和集合判重的应用。
2025-06-13 11:42:57
142
原创 python做题日记(15)
本文摘要: 两道算法题都要求O(logN)时间复杂度: 第33题处理旋转排序数组,通过二分查找确定有序区间,调整左右指针定位目标值; 第34题在含重复元素的数组中,分别用两次二分查找定位目标值的起始和结束位置,通过比较值调整指针边界。两道题的核心都在于利用二分查找特性,根据数组局部有序的特点进行高效搜索。代码展示了如何通过条件判断精确控制指针移动,实现快速定位目标值。
2025-06-12 11:57:56
334
原创 python做题日记(14)
摘要:两题分别涉及排列和括号匹配算法。第三十一题要求找出整数数组的下一个字典序排列,通过从后向前查找第一个升序对,交换并反转后续元素实现。第三十二题求最长有效括号子串长度,使用栈结构处理,初始栈存-1,遍历时遇到左括号压栈,右括号弹栈并更新最大长度。两道题均展示了特定数据结构在解决特定问题时的优势。
2025-06-11 12:01:14
449
原创 python做题日记(13)
第二十九题题目的意思是给定被除数和除数,在不使用乘除法和取余运算的情况下,算出最终结果,结果是向零取整的整数。最简单的想法是采用不断的在被除数中减去除数,直至不能减了为止,就可以得到最终的结果。也可以利用移位运算,在之前这种想法的基础上加速减法的速度,通过移位操作就相当于每一次减去2的幂次个除数,再将这个数加到最后的结果当中。
2025-06-10 12:53:37
591
原创 python做题日记(12)
摘要:本文解析了LeetCode第27题和第28题的解法。第27题要求原地移除数组中等于给定值的元素,采用双指针法(快慢指针)实现。快指针遍历数组,慢指针标记新数组位置,最终返回新长度。第28题要求找出子串首次出现的位置,处理空串情况后,通过遍历主串并比较子串长度窗口实现。两题都体现了数组和字符串处理的基本技巧。
2025-06-04 18:03:29
254
原创 python做题日记(11)
本文摘要了两道链表和数组算法题的解法:1)第25题实现k个一组翻转链表,通过分组检查、头插法翻转和重新连接完成操作,文中用表格详细演示了翻转过程;2)第26题删除有序数组重复项,采用快慢指针法,当快慢指针值不同时移动慢指针并赋值。两道题分别展示了链表的翻转技巧和数组的去重方法。
2025-05-31 11:20:47
424
原创 python做题日记(10)
本文摘要两则: 合并K个升序链表的解法:利用Python的heapq模块构建最小堆,依次弹出最小节点连接到新链表。当弹出节点仍有后继节点时,将其加入堆中继续处理,直至堆为空。时间复杂度优化为O(NlogK)。 链表节点两两交换的实现:通过设置dummy节点和prev指针,在循环中交换相邻节点的next指针。每次处理后移动prev指针至下一对节点的前驱位置,直至剩余节点不足两个。该方法以O(1)空间复杂度完成原地交换。
2025-05-27 18:21:27
294
原创 python做题日记(9)
本文介绍了两个算法问题的解决方案。第一个是合并两个有序链表,通过比较节点值将较小节点依次连接,剩余节点直接追加,最终返回新链表头结点。第二个是生成所有有效的括号组合,采用递归方法,在保证右括号不超过左括号的前提下构建所有可能的排列。两个问题的解法都体现了对数据结构特性的利用和递归思想的运用。
2025-05-26 16:06:28
343
原创 python做题日记(8)
摘要:本文解析了两个算法题解。第19题通过双指针法(快慢指针)高效删除链表倒数第N个节点,只需一次遍历即可完成操作,关键是将快指针提前移动N+1步。第20题使用栈结构验证括号有效性,通过建立括号映射关系,遇到左括号入栈、右括号匹配栈顶元素,最终检查栈是否为空来判断括号是否完全匹配。两题分别展示了链表操作和栈结构的典型应用场景。
2025-05-24 17:13:22
548
原创 python做题日记(7)
第十七题要求通过电话号码的数字组合生成所有可能的字母组合,类似于九键拼音输入法。解题思路采用递归方法,首先建立数字与字母的映射关系,然后通过递归函数遍历每个数字对应的字母,生成所有可能的组合。递归的终止条件是处理完所有数字,最终返回所有组合的列表。第十八题是求数组中四个数字的和等于目标值的问题,采用排序加双指针的方法。首先对数组排序,然后通过两层循环固定两个元素,再使用双指针寻找另外两个元素,确保四数之和等于目标值,并跳过重复元素以避免重复解。最终返回所有符合条件的四元组。
2025-05-22 17:23:13
515
原创 python做题日记(6)
第十五题和第十六题都涉及在整数数组中寻找三个数字的组合,但目标不同。第十五题要求找出所有三数之和为零且不重复的组合,而第十六题则是找出三数之和最接近给定目标值的组合。两题的解决思路相似,都先对数组进行排序,然后使用双指针技术来遍历数组。第十五题通过跳过重复元素来避免重复组合,而第十六题则通过比较三数之和与目标值的接近程度来更新最接近的结果。两题的核心都是通过调整指针位置来逼近目标值,第十五题在找到等于零的组合时记录结果,第十六题则在找到等于目标值的组合时直接返回。
2025-05-22 16:20:31
363
原创 python做题日记(5)
第十三题涉及将罗马数字转换为整数,通过从右向左遍历字符串,并根据当前字符与其右侧字符的大小关系决定累加或累减。第十四题则是查找字符串数组中的最长公共前缀,通过以第一个字符串为基准,逐步缩短前缀,直到与所有字符串匹配。这两题分别展示了如何通过遍历和比较操作解决字符串处理问题。
2025-05-21 21:09:32
300
原创 python做题日记(4)
第十一题涉及计算数组中两个数作为容器边界时,能形成的最大容器的容积。通过从数组两端向内移动,选择较短边作为高,计算面积并不断更新最大面积,最终找到最大容积。第十二题是将十进制数字转换为罗马数字。通过列出特殊罗马数字表示(如4、9等),遍历这些值,将十进制数字逐步转换为对应的罗马数字组合。这两个问题分别通过双指针法和贪心算法解决,展示了不同的编程技巧和逻辑处理方式。
2025-05-19 22:22:38
255
原创 pthon做题日记(3)
这篇文章主要讨论了LeetCode第十题“正则表达式匹配”的解题思路和代码实现。题目要求判断给定的字符串是否与特定的匹配模式相符,其中“.”可以匹配任意字符,“”表示其前面的字符可以出现零次或多次。文章采用动态规划的方法来解决这个问题,通过构建一个DP表来记录字符串和模式之间的匹配状态。DP表中的每个元素表示字符串的前i个字符是否与模式的前j个字符匹配。文章详细解释了状态转移方程,特别是如何处理“”字符的两种情况:匹配零次或多次。通过这种方式,可以有效地解决复杂的匹配问题,并避免重复计算。
2025-05-17 11:47:30
838
原创 python做题日记(2)
本文介绍了两个编程问题的解决方案。第一个问题是将字符串转换为整数,处理步骤包括去除空格、确定符号、读取数字并检查是否超出32位整数范围。代码中使用了strip()去除空格,isdigit()判断字符是否为数字,并通过条件判断处理溢出情况。第二个问题是判断一个整数是否为回文数,可以通过将整数转换为字符串并比较其正序和倒序是否相等来实现。此外,还提供了一种数学方法,通过反转数字的一半并与进行末尾去位数字进行比较来判断是否为回文数。这两种方法都考虑了负数和以零结尾的特殊情况。
2025-05-13 22:33:40
209
原创 Python做题日记(1)
本文记录了作者在学习编程过程中对两道题目的思考与解题方法。第一题是“Z字形变换”,通过控制方向和行数,将字符串按Z字形排列。作者详细解释了代码的实现逻辑,并介绍了join函数的用法。第二题是“整数反转”,通过取余和整除操作,将整数反转并检查是否超出32位整数范围。作者还复习了字符串切片语法。文章旨在通过记录学习过程,提升思考能力,并期待在持续学习中不断进步。
2025-05-12 22:08:06
390
原创 学习总结与记录
学习了map函数的基本用法,特别是在pandas中对Series的逐元操作。通过lambda函数对每个元素进行条件判断,并统计满足条件的元素数量。学习了Pandas中size函数的作用,用于统计分组后的元素数量。理解了链表的构建逻辑,特别是如何通过虚拟节点简化操作。学会了如何处理链表长度不一致的情况,以及如何处理仅为。理解了暴力解法和优化解法(使用哈希表)的区别。理解了虚拟头节点的作用,以及如何处理进位。学习了如何解决链表表示的两数相加问题。学习了如何解决经典的两数之和问题。
2025-04-08 22:35:58
348
原创 Day 10 最长公共前缀和删除链表中的节点
感觉隔两天一写是最近最快的频率了,每天感觉没干什么但又觉得有点累。在初级算法这本电子书中字符串分类的题目最长公共前缀是最后一题,在字符串之后的章节是链表,这个章节第一个题目是删除链表中的节点。
2024-07-19 16:57:24
449
原创 Day 9 实现strStr()和外观数列
又拖了两天,真是要批评一下自己,虽然这两道题有需要加以理解的地方,但是每次想写的时候总是被一种无形的力量阻挠一下,还是得坚定一下自己的信念,其实想明白也不需要非常多的时间,提高一下对自己的要求还是必要的。
2024-07-16 19:42:03
893
原创 Day 8 验证回文串和字符串转换整数
本来想早上写的,结果发现周六的早上还是让人懒惰,就一直拖到了下午。做了这两道题还是不断的会有一些收获,希望每天都有新的收获,这样会让我每天都会期待明天的到来。
2024-07-13 16:09:38
304
原创 Day 7 字符串中第一个唯一字符和有效的字母异位词
最近也是在不断地更新着自己的作息,这一次又是在将健身纳入自己的日常生活序列之后尝试调整到一个合适的作息时间,这几天还是在不断地调整和适应。
2024-07-12 08:27:08
473
原创 Day 6 翻转字符串和整数反转
给自己放了一周假感觉过了很长时间,说来有点惭愧,是时候继续学习下去了。还是继续按照每天两道题的速度将题目做下去。之前将初级算法电子书的数组部分题目做完,但是还没来得及复习,今天继续向后做字符串的题目。
2024-07-08 22:26:18
642
原创 Day 3 数组交集与只出现一次的数字
今天晚上继续往下思考和学习了两道题目,分别是只出现一次的数字和求两个数组的交集,在之后查看题解的过程中发现这两道题都提到了使用哈希表的方法,但是对于哈希表自己并没有什么深入了解,所以决定这个周末抽出时间来仔细学习一下哈希表,然后尝试用文字记录一下自己的理解。
2024-06-26 23:12:47
418
原创 Day 2 轮转数组和重复元素
今天遇到的第一题是第189题:轮转数组。(因为函数没有返回值,所以检测的结果是原数组,需要将结果再复制到原数组中)采用取余是因为要将多出数组的部分减掉数组本身长度,比如说原长度为7的数组,需要移动3步,那么原先处在第6个位置元素就需要移到头部的第2个位置,也就是(6+3)%7 = 2.其中的函数qsort是C语言中用于数组排序的函数,其中有四个变量,第一个变量是数组名,第二个变量是元素个数,第三个变量是每个元素所占字节,第四个变量是排序的原则,包括递增、递减等。随后查看题解的时候,发现还有翻转数组的办法。
2024-06-25 23:50:38
514
原创 第一篇博客
一开始的两道题都是有关数组的算法题。第一道题是第26题,删除有序数组中的重复项,也就是删除数组中重复的项,并且最后返回数组中不重复项的项数,题目要求在原地删除数组中的元素,也就是不使用其他存储空间,这也使我一开始的想法不成立,一开始我想直接暴力求解,采用一个新的数组存储我需要保留下来的项,使用两重循环,每当发现有两项相等时,就将存储数组项数的变量减少1。在这一题中在一个数组中,每一个元素代表一天股票的价格,你可以在这一天买和卖出股票,也可以在这一天买入,在随后几天中卖出,返回这几天中能够得到的最大收益。
2024-06-24 23:31:29
507
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅