Python每日一练
文章平均质量分 75
Python每日一练专栏目的在于,帮忙学习Python的小白提高编程能力,训练逻辑思维,持续更新中,欢迎免费订阅!!!
摩羯座程序员
在IT行业行走的二十年,让我经历了从PC时代到移动互联网,再到如今AI浪潮的技术变迁。我并非追赶每一朵浪花,而是深耕技术本质,构建应对变化的底层能力。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python每日一练---第二十二天:串联所有单词的子串
本文介绍了如何在给定字符串s和字符串数组words中查找所有串联子串的起始位置。串联子串需包含words中所有字符串以任意顺序排列连接而成。文章通过滑动窗口算法实现,统计words中单词出现次数,遍历s中所有可能的起始位置,检查符合条件的子串。符串匹配问题。原创 2025-11-24 13:10:06 · 71 阅读 · 0 评论 -
Python每日一连---第二十一天:无重复字符的最长字串
本文介绍了如何用Python解决查找字符串中最长无重复字符子串的问题。采用滑动窗口算法,通过维护左右指针和字符位置字典来高效查找最长子串。算法核心是当遇到重复字符时移动左指针,并始终记录字符最新位置。代码实现简洁,时间复杂度为O(n),适用于处理最长5×10^4长度的字符串原创 2025-11-22 14:50:42 · 69 阅读 · 0 评论 -
Python每日一练---第二十天:长度最小的子数组
本文介绍了使用滑动窗口算法在Python中寻找满足和≥target的最短连续子数组的方法。通过双指针(fast和slow)控制窗口边界,动态调整窗口大小:右指针扩展窗口求和,左指针收缩窗口优化长度。时间复杂度为O(n),适用于全正数数组。代码示例展示了具体实现,当窗口和≥target时记录最小长度,最终返回结果。原创 2025-11-21 22:44:44 · 41 阅读 · 0 评论 -
Python每日一练---第十九天:反转字符串中的单词
本文介绍了两种Python反转字符串中单词顺序的方法:1. 使用内置函数s.split()[::-1]分割后反转再连接,简洁高效;2. 利用栈结构,遍历字符串构建单词,遇到空格压栈,最后弹出连接实现反转。两种方法都能处理多余空格问题,确保结果中单词间仅保留单个空格。原创 2025-11-20 23:05:04 · 465 阅读 · 0 评论 -
Python每日一练---第十八天:最长公共前缀
本文介绍了如何用Python编写函数查找字符串数组中的最长公共前缀。算法思路是以第一个字符串为初始前缀,依次与后续字符串比较,通过不断缩短前缀来寻找公共部分。若在比较过程中前缀为空,则直接返回空字符串。示例代码演示了该方法的实现,时间复杂度为O(n*m),其中n是字符串数量,m是最短字符串长度。该方法能正确处理不存在公共前缀的情况,返回空字符串。原创 2025-11-19 22:16:56 · 258 阅读 · 0 评论 -
Python每日一练---第十七天:整数转罗马数字
本文介绍了将整数转换为罗马数字的算法实现。罗马数字由特定符号组合表示,转换时需要遵循特殊规则(如4和9需用减法表示)。算法采用贪心策略,预先定义包含特殊情况的降序映射表(如1000→"M",900→"CM"),然后从高到低依次匹配最大符号值。通过循环减去对应数值并拼接符号,最终得到罗马数字表示。该方法确保了正确转换所有1-3999范围内的整数,时间复杂度为O(1)。原创 2025-11-18 22:59:02 · 197 阅读 · 0 评论 -
Python每日一练---第十六天:加油站
这篇Python练习讲解如何判断汽车能否绕环形加油站一周行驶。给定汽油数组gas和消耗数组cost,算法首先比较总汽油和总消耗量,若不足则返回-1。否则通过贪心算法遍历加油站:跟踪当前剩余油量,若油量不足则重置起点,最终若总油量足够则返回起点编号。原创 2025-11-17 21:03:07 · 1077 阅读 · 0 评论 -
Python每日一练---第十五天:三数之和
本文介绍了如何用Python解决三数之和为0的问题。算法思路是对数组排序后固定一个数,再用双指针法查找满足条件的另外两个数,同时跳过重复元素。代码实现中先排序数组,然后遍历每个元素,对于当前元素,使用左右指针寻找和为0的组合,并处理重复情况,最终返回所有不重复的三元组。原创 2025-11-13 13:22:50 · 323 阅读 · 0 评论 -
Python每日一练---第十四天:两数之和II - 输入有序数组
本文介绍了一种使用双指针算法在非递减排序数组中寻找两数之和等于目标值的解决方案。算法通过初始化左右指针分别指向数组首尾,根据当前和与目标值的比较动态调整指针位置:和小于目标则左移,大于则右移。最终返回满足条件的下标(从1开始计数)。该方法保证在O(n)时间复杂度和常量空间复杂度内解决问题,适用于唯一解的情况。原创 2025-11-12 22:16:50 · 812 阅读 · 0 评论 -
Python每日一练---第十三天:判断子序列
本文介绍了如何判断字符串s是否为字符串t的子序列。通过双指针法,一个指针遍历s,另一个遍历t,依次匹配字符。匹配成功则同时移动两个指针,否则只移动t的指针。最终如果s指针走完全程,说明s是t的子序列。该算法时间复杂度为O(m+n),空间复杂度O(1),适用于单次查询。文中提供了Python实现代码,并解析了算法思路,简单直观且高效。原创 2025-11-12 13:04:04 · 450 阅读 · 0 评论 -
Python每日一练---第十二天:验证回文串
本文介绍了一个判断字符串是否为回文串的Python算法。算法核心是忽略大小写和非字母数字字符,使用双指针从两端向中间比较字母数字字符是否对称。时间复杂度为O(n),空间复杂度为O(1)。代码示例展示了如何处理带标点的字符串,如"A man, a plan, a canal: Panama"能正确识别为回文,而"race a car"则不是。空字符串和简单回文也通过了测试验证。原创 2025-11-11 23:21:21 · 394 阅读 · 0 评论 -
Python每日一练---第十一天:除自身以外数组的乘积
本文介绍了如何在O(n)时间复杂度内,不使用除法的情况下计算数组中除自身外所有元素的乘积。通过构建左右前缀积数组,实现每个元素的乘积计算。算法先从左到右计算左前缀积,再从右到左计算右前缀积,最后将两者相乘得到结果。该方法高效解决了LeetCode上"除自身以外数组的乘积"问题,保证了时间复杂度和空间效率。原创 2025-11-10 13:08:13 · 268 阅读 · 0 评论 -
Python每日一练---第十天:买卖股票的最佳时机II
本文介绍了使用Python解决股票最佳买卖时机问题的算法。题目要求在最多持有一只股票的条件下,通过多次买卖获得最大利润。算法思路是遍历每日价格,只要第二天价格高于当天就进行买卖,将所有上涨收益累加。代码实现了一个简单的循环来比较相邻两天的价格差并累加利润,最终返回最大总利润。该方法可以处理所有可能的上涨情况,实现利润最大化。原创 2025-11-08 09:01:05 · 315 阅读 · 0 评论 -
Python每日一练---第九天:H指数
本文介绍了如何计算研究者的h指数。h指数定义为研究者有h篇论文,每篇至少被引用h次。算法思路是从最大可能的h值开始递减,统计引用次数小于h的论文数量,并与允许的低引用论文数比较。Python实现通过遍历数组进行统计,找到满足条件的最大h值。原创 2025-11-07 22:33:50 · 385 阅读 · 0 评论 -
Python每日一练---第八天:最后一个单词的长度
Python编程题:计算字符串中最后一个单词的长度。题目要求找出由字母组成、不包含空格的最后一个子串的长度。算法采用从字符串末尾逆向遍历的方式:先跳过末尾空格定位单词结尾,再向前计数直到遇到空格或开头。时间复杂度O(n),空间复杂度O(1),高效避免了分割字符串操作。代码示例展示了具体实现过程。原创 2025-11-06 21:58:40 · 322 阅读 · 0 评论 -
Python每日一练---第七天:跳跃游戏II
本文介绍了使用贪心算法解决数组跳跃问题,寻找到达终点的最小跳跃次数。算法通过维护当前可达范围和在每一步选择能跳得最远的位置来优化跳跃策略。具体实现时,遍历数组时记录当前跳跃边界和下一步能到达的最远位置,当到达边界时更新跳跃次数。以示例[2,3,1,1,4]为例,只需2次跳跃即可到达终点。该算法时间复杂度为O(n),空间复杂度O(1),高效地解决了问题。原创 2025-11-06 13:12:24 · 899 阅读 · 0 评论 -
Python每日一练---第六天:罗马数字转整数
本文介绍了将罗马数字转换为整数的Python实现方法。首先解释了罗马数字的基本规则和六种特殊情况,如IV=4、IX=9等。然后提出了从左到右遍历字符串的算法思路,比较当前字符与下一个字符的值,处理特殊情况时跳过下一个字符。提供了两种代码实现:一种是常规的左到右遍历方法,另一种是从右到左的优化遍历方法。两种方法都能正确处理罗马数字到整数的转换,示例验证了代码的正确性,如"MCMXCIV"被正确转换为1994。该练习有助于提高编程能力和逻辑思维能力。原创 2025-11-05 22:24:02 · 1127 阅读 · 0 评论 -
Python每日一练---第五天:轮转数组
本文介绍了Python中实现数组轮转的几种方法。给定整数数组nums和轮转次数k,通过三步反转法(整体反转→前k个反转→剩余元素反转)实现高效轮转,时间复杂度O(n),空间复杂度O(1)。文章还对比了其他实现方式:逐步移动法(效率低)、额外数组法(直观但空间高)以及Python切片法(简洁)。其中三步反转法在效率和代码简洁性上表现最佳,是最优解。不同方法各具特点,可根据实际需求选择合适算法。原创 2025-11-04 21:47:25 · 364 阅读 · 0 评论 -
Python每日一练---第四天:多数元素
本文介绍了两种Python解决数组多数元素问题的方法。题目要求找出出现次数超过数组长度一半的元素。第一种方法使用字典统计元素频率,时间复杂度O(n),空间复杂度O(n)。第二种采用Boyer-Moore投票算法,通过计数变量高效地找到多数元素,空间复杂度O(1)。文章包含算法思路、代码实现和示例分析,帮助读者理解这两种解决多数元素问题的方法。原创 2025-11-04 13:10:45 · 308 阅读 · 0 评论 -
Python每日一练---第三天:删除有序数组中的重复项
本文介绍了如何使用Python解决有序数组去重问题,要求保留最多两个重复元素。通过滑动窗口和双指针两种方法实现:第一种方法使用滑动窗口检测重复区间,当长度超过2时删除多余元素,时间复杂度O(n²);第二种优化方案采用双指针法,只需O(n)时间,通过比较当前元素与前两个位置的元素来决定保留与否,效率更高。文章包含问题描述、分析思路和代码实现,帮助读者理解如何在原地修改数组并满足空间复杂度要求。原创 2025-11-03 23:29:45 · 686 阅读 · 0 评论 -
Python每日一练---第二天:合并两个有序数组
本文介绍了如何合并两个有序数组nums1和nums2,要求结果存储在nums1中。主要思路是从数组末尾开始比较元素,将较大值依次放入nums1的尾部。若nums2还有剩余元素,则直接拷贝。算法使用三个指针分别跟踪nums1有效数据末尾、nums2末尾和合并位置。代码实现展示了如何高效完成这一合并操作,时间复杂度为O(m+n),空间复杂度为O(1)。该解法适用于处理有序数组合并问题。原创 2025-11-03 13:18:48 · 1122 阅读 · 0 评论 -
Python每日一练---第一天:买卖股票的最佳时机
本文介绍了解决股票买卖最大利润问题的两种方法。问题要求在给定股价数组中找到单次买卖的最大利润。暴力枚举法效率低,会超时;更优解是动态规划思路,通过一次遍历,记录最低价和当前最大利润,时间复杂度O(n)。两种方法代码实现都已给出,动态规划思路解法更高效。原创 2025-11-02 21:17:44 · 1427 阅读 · 0 评论
分享