python题目练习
文章平均质量分 59
练习python题目 题目主要来自力扣 博客里面会写上自己写出正确代码的过程既是记录 也是和大家互勉~
m0_62653520
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
python每日一题 反转链表
然后天杀的 我发现这个Left right指的是位置 不是数值 我真的服了 这个例子给的要不要再恶心一点 好吧是我不认真看题 那我们重新开始来过 这样其实更简单了 我直接存进数组里面 把该反转的反转 然后再转化为链表就好了。我现在就是一看到这样的 就会想着和列表进行结合 我也确实这么做了 就是找到这两个数所在的指针 然后将中间包括本身的数存到一个列表里面 然后将列表进行反转 然后再把列表中的元素存回去。current.next = ListNode(num) # 创建新节点并链接。原创 2025-05-23 21:50:20 · 578 阅读 · 0 评论 -
python每日一题 搜索旋转排序数组
可能是 2222211112 也可能是23452222千奇百怪的 但是我没有想到特别好的解决这个重复的 我就问了一下chat 结果就是加上这句 if nums[mid] == nums[left] == nums[right]: left += 1 right -= 1 continue 因为不确定 所以要进行一步的处理 在旋转有序数组中,同样的 如果是右边有序 和最右边元素比较 如果比最右边元素小 只能在右边找 如果比最右边元素大 那右边这不必找了 只能跑到左边去找 如果相同就return。原创 2025-05-24 14:47:54 · 1099 阅读 · 0 评论 -
python 每日一题 插入区间
这段代码的意思就是创建一个新数组 然后遍历intervals 当然遍历的同时还要考虑new的插入 如果插入过的话就不用管了 没插过的话要插入 如果新区间的右边元素比当前元素的左边还大 那就先插入这个元素 再插入当前元素 插入之后可就不能再管这个了 就flag=true 如果新区间的左边比当前元素的右边还大 那就继续往后找 先把当前元素放到这个数组里面一旦出现重叠 就要进行合并 每个元素都要经历这样的情况 左边取最小 右边取最大 如果到最后还没插入 那么就是放到最后面了。原创 2025-05-22 12:00:19 · 824 阅读 · 0 评论 -
python每日一题 这是个技巧题 轮转数组
再看 1 2 3 4 往前移动2个 按照k+1 那应该是 3 4 1 2 按照k+1 应该是4 1 2 3 这不对 而且我的k+1的由来是我开始写的是k 然后发现变成K+1可以得到想要的结果 真的是 这个逻辑不对啊 你要是移动的话 只能说是 你末尾的那个元素现在到了开头 比如 1 2 3 4 5 6 7如果是移动k个 那么 此时5在开始的位置。1,2,3,4,5,6,7往前移动三个 是5671234 从k+1开始确实是对的。nums[:k]=nums[:k][::-1]反转前k个元素。原创 2025-05-24 15:40:30 · 876 阅读 · 0 评论 -
python每日一题 分隔链表
好的现在左边的处理完了 我们来处理右边的 就是要让右边的小于特定数值的移动到左边 那么这个时候你是需要一个指针去记录first_x前面的 但是我的代码存在很多小问题 也是改了很多很多遍才完成下面的代码 虽然情况都是可以达到的 但是和题意不符 我真的是要噶过去了 红色部分的改进是针对于[2,1] 2这样的情况进行改进的 反正就是一直在加指针进行记录 一直在试情况。1.将左边的凡是大的移动到first_x前面的元素之后就行 当然还需要判断这个first_x之前的这个元素是不是比特定值大的。原创 2025-05-21 10:03:08 · 1153 阅读 · 0 评论 -
python每日一题 数组中的第k个最大元素
更完这个 再更一个 我真的要学习树去了 再不去复习已经没有可以更的题目了 人也不能只天天在自己会的地方去反复学 感觉列表和单纯的链表已经没啥的了 主要是和栈、队列、树进行结合了。我不懂这个题的意义在哪?还是中等题 这也是太简单了 哦默默需要时间复杂度是o(n)那这个不行 那需要使用快速排序之类的 不可以使用sorted 但是我这里先不写这个代码了。我觉得自己天天立下的flag都没好好执行 前几天还说更新树呢 今天我又想先更新排序算法了。请注意,你需要找的是数组排序后的第。个最大的元素,而不是第。原创 2025-05-24 14:59:41 · 251 阅读 · 0 评论 -
python每日一题 今天的每日一题就更新到这里
然后我测试的时候说我应该返回一个链表 我看他题目给出的最后结果明明是列表 但是没事 无伤大雅 改一下返回的类型就行 也不用再转链表了 蛮好的 其实我这个转来转去本来就很多余 返回链表刚刚好。我想说点废话 就是我觉得我需要去学习一下了 我下个帖子要更关于树的学习 我在此立一个flag。改好返回的类型之后运行结果击败100% 我觉得这个题目真的是蛮简单的 最重要的就是想到。我觉得这个用列表做会好做 然后对于列表中的元素进行循环移动 我知道切片操作超级好用。,旋转链表,将链表每个节点向右移动。原创 2025-05-22 12:44:46 · 651 阅读 · 0 评论 -
python每日一题 今天的python每日一题就更新到这里
这道题用的是快慢指针的方法 我就记住反正要是看有没有环就使用快慢指针 所以这个其实没什么好说的 可能会让大家感到迷惑的点我来解释一下 就是如果你是环形的 那么一定是return Ture 只要不是 就一定会出现fast=none 或者fast.next=none的情况 一旦出现这个情况就是return false了 fast的话验证的会更快 否则的话有环 是不会出现这种情况的 不要自己被自己搞晕了。为了表示给定链表中的环,评测系统内部使用整数。我看它的意思就是返回的是索引 我觉得我写的代码返回的也是索引。原创 2025-05-21 11:40:07 · 936 阅读 · 0 评论 -
python每日一题 求算术平方根
对于为什么return right自己可以在纸上写写看 然后就是这个二分查找对于找很多东西都是适用的 因为只需要存储一些变量 完全不用为数的范围分配内存 我看大多数大佬都是用的这个方法 那咱就不分析其他的方法了。然后我觉得这个没啥问题 该输出的也都可以 但是超出内存限制了 就比如 x很大的话其实找这个i是很难的 那么就可以使用另外一个方法就是二分查找 只需要存储几个变量而不是整个数字范围。不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。原创 2025-05-25 10:25:38 · 347 阅读 · 0 评论 -
python每日一题 删除有序数组中的重复项
那么我们就直接来干脆的 移动的时候判断 如果是相等 并且此时差距已经大于等于2 那直接就开删 不用等到不相等的时候了 不然遇到111永远等不到相等的时候了 然后我解释一下下面的代码 当两者相等的时候right就会往前移动 一旦差距大于等于2 就开始删 删完之后更新left的位置 只要二者相等 right就会往前移动 删完之后更新left的位置 right也还是回往前移动 如果不相等更好办了 直接往前移动就可以了。#不管是删还是没删 left right的位置都要开始发生改变。else:#重复不超过2。原创 2025-05-23 20:55:53 · 848 阅读 · 0 评论 -
python每日一题 只出现一次的数字
这个简单 就是先进行排序 如果你后面的元素跟你相等 我就往后移动两位 如果不相等 那么我就找到了只出现一次的数字 要注意这个范围 防止越界 就这个越界这点是需要进行思考一下的 其他的没什么 代码1如下。这个是利用了位运算和状态机 真的是非常非常nice 果然大佬就是大佬 我是真的太辣鸡,我接下来更一篇帖子就是关于这个的学习 如果大家有想和我一起学习这个的 请关注我的更新吧~这个是问题2 据说应该是要比问题1难的 但是我怎么感觉是一样的方法呢。请你找出并返回那个只出现了一次的元素。外,其余每个元素都恰出现。原创 2025-05-21 10:21:04 · 474 阅读 · 0 评论 -
python 每日一题 最大子数组和
好的 那接下来我们思考 如何去寻找这个最长子数组呢 这个情况其实是很麻烦的 遇到正数那没啥说的 就加上就行 但是如果遇到负数 如果加上这个负数整体小于0了 那肯定要抛弃了 所以就是一个非常重要的思想就是 只要遇到负的 但是跟前面的总和加起来>0 那就没必要管了 这个负的留着的伤害没有前面的数加起来的保护多 于是就有了下面的代码。2.之前的逻辑少了一块 如果后面加入的值是负数 比如-99 还剩一个正数20 那么这两个数是不应该被算进去的也是脑子昏昏了 所以应该有变量记录当前之和 和总的最大和。原创 2025-05-22 10:17:34 · 1006 阅读 · 0 评论 -
python 每日一题 进制求和
需要注意的点就是while条件 以及遇到已经遍历完的情况应该怎么处理 以及遇到这种最高位需要进位的时候应该如何处理 将整体的逻辑思考好 代码也就差不多可以了 该考虑的情况要好好考虑。思路就是遍历 当前的值是根据当前的相加和下一位的进位决定的 取余就是当前的值 //就是应该往上面进的值 然后因为你存的时候是反过来的 所以要翻一下 而且连接符是啥都没有的''然后还有很粗心的就是在 a1 b1是0的时候是有效的字符 所以应该是为负的时候才会将其看作是0 这个地方太粗心了 最后修改好的代码就是。原创 2025-05-25 11:22:53 · 990 阅读 · 0 评论 -
给定一个字符串,找到第一个不重复的字符并返回其索引,若无则返回 -1
思路就是使用字典 找到第一个value值1的,并且返回这个字符在字符串中的索引 然后直接return结束 当然你这里要是return不了 只能跑到那个-1的地方进行return了。return n.find(keys)#查找这个key所在的索引。要注意的是找到索引的式子是n.find(keys)找到第一个这样的字符所在的索引。s[i]+=1#指的是value值发生变化。#print(keys)#打印这个key。原创 2025-04-23 19:55:19 · 364 阅读 · 0 评论 -
统计文件中的单词出现次数 并且按照频率排序
就是还是counter 很好用 直接就是每个单词和对应出现的频率 再使用一个most_common 就是按照降序的顺序。words = re.findall(r'\b[a-z]+\b', data)#使用正则表达式提取单词。sorted_counts = word_counts.most_common() # 按频率降序。word_counts = Counter(words)#对每个都进行计数。然后就是使用正则表达式提取单词(提取某个东西使用正则表达式这是非常常规的想法)原创 2025-04-23 20:15:36 · 280 阅读 · 0 评论 -
一道有趣的Python练习题
这个算法的意思就是 0 不是素数 1不是素数 然后从2开始 2是素数 开始找2的倍数 是2的倍数的话标记为false 然后到3 继续标记 是3的倍数的话就标记为False 被标记为False的话就跳过。一开始看错题目了 还以为是求非因子 笑死 自己一下子想到了找因子 然后排除因子 结果是求小于n的素数。打印的话就是打印这个位置就行 这个位置就是对应的数值,都一样。找求素数的算法 然后开始累积 这里举一个求素数的算法。s[0]=s[1]=False#0和1都不是素数。开始从0到n全部都是Ture。原创 2025-04-25 21:26:12 · 264 阅读 · 0 评论 -
python练习题
说了空间复杂度为o(1)那么只能使用数组本身去 而且负数和0是不用管的 那么我们可以第一遍首先将所有的负数和0变为n+1(没有可能本来最小正整数是n+1,加上之后变了 如果最小正整数是n+1,证明是从1到n,那么没有数值是会变成n+1的,所以所有的负数和0变为n+1是绝对不影响的)然后就是非常关键的一点 因为只有数字在1到n之间才会影响结果 所以就比如数字3存在 我们就将数组 lst[2]这个位置的数字变为负数 这样也不影响这个位置的数进行同样的检验 但是要加上abs。给定一个未排序的整数列表。原创 2025-04-25 19:52:02 · 243 阅读 · 0 评论 -
每日一题Python
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。注意的细节就是创建实例和创建对象 还要就是如何输入元素成为一个列表。各位大佬有没有节约内存的办法?整数,并返回它们的数组下标。我的想法非常简单 就是遍历。你可以按任意顺序返回答案。,请你在该数组中找出。原创 2025-05-08 18:05:12 · 200 阅读 · 0 评论 -
判断是否是回文数组
对于链表而言的关键就是使用快慢指针找到中间位置,然后进行后半部分的反转,这样的话就可以开始进行比较了。指针学的很差 还是要继续学。原创 2025-04-23 20:57:34 · 150 阅读 · 0 评论 -
对于两个有序列表进行排序
我的思路就是首先就是传入两个列表,并且创建一个新的空列表。看哪个小就让哪个进去。等到不满足and情况的时候 就把剩下的全都加进去好了,注意是从i和j开始加 没关系的 因为最后i++和j++是不会导致重复添加的。def sort_two(m:list,n:list)->list:#二者都是升序的。s.extend(n[j:])#使用extend将剩下的元素加进去。还有就是细节部分 m和n都是list形式 并且返回的也是List形式。原创 2025-04-23 18:19:12 · 249 阅读 · 0 评论 -
检查有效括号
分析下来就是使用字典 左右括号是一对,然后左括号就入栈 右括号如果栈空或者这个栈中的key对应的value不是这个符号 都不行 返回值为bool类型。思路就是遇到左括号入栈 遇到右括号出栈 出栈的话看是否是跟这个右括号相匹配的。只包括括号 判断是否是成对的 那就需要用到栈了。原创 2025-04-23 17:57:44 · 151 阅读 · 0 评论 -
每日一题Python
大佬们有没有更好的思路呢?感觉这个方法很笨 但是暂时想不到更好的 欢迎一起讨论。思路就是找到一个长的字符串 存起来 再去找 如果更长就更新 不是的话就继续找。break#如果不是就终止。给定一个字符串 s,请你找出其中不含有重复字符的。需要注意的是下次找的话应该从哪个字母开始找。原创 2025-05-08 19:02:38 · 157 阅读 · 0 评论 -
写一个有趣的python例题
思路就是创建一个空列表,来一个存一个 用一个x存储第一个字符 当是的话就count+1不是的话就存进去 然后使得下一个字符为x 继续进行 直到这个字符也没了 然后继续下一个 这个x跟指针感觉差不多。需要注意的点 首先是这个思想 存储第一个字符 是的话就count加 不是的话就加到列表里面去 然后变换存储的字符继续 要注意最后那个字符没办法执行else 所以跳出for之后要把它加上。开始的时候是这样写的 这样就会导致c不会被计算进去 因为只会执行if 根本到不了else也就根本加不到列表里面去。原创 2025-04-25 15:30:33 · 285 阅读 · 0 评论 -
猜数字游戏
number=random.randint(1,100)#生成1到100之间的随机数。缺点就是用户输入的如果不是整数 会崩溃 加个捕获异常会好很多。x=int(input('请输入你猜测的数字'))print('小了')print('大了')n=n-1这个冗余了。原创 2025-04-24 17:58:55 · 133 阅读 · 0 评论 -
编写一个函数,统计列表中各元素出现的次数,并返回频率最高的前 3 个元素。
开始遍历 如果这个字符在这个字典里面,那么索引值加一 如果不在 那么现在在了索引值就设置为1。这句话是进行排序,使用Items使得字典转化为(键,值)元组的列表。我的思路就是使用字典,这样可以明确每个字母对应的数量是几。这样的话打印出来的字典就是字符:对应数字的情况。那么打印频率最高的话就是对于索引值进行排序。定义一个函数 然后函数里面定义一个空字典。原创 2025-04-23 17:19:32 · 271 阅读 · 0 评论 -
每日一个有趣的Python题目 寻找字符串中的最长回文子串
俺的脑子不中了 我能想到的方法就是从中间开始 分成两个大部分 一个往左找 一个往右边找 然后条件一定要注意right left的范围和条件 进行更新最长的回文子串 需要注意的是我没进行判断是奇数还是偶数 让代码自己去运行吧 如果符合条件自己就噶了。我真的觉得这个方法不够聪明 但是我想不到别的更好的了 写的代码也乱乱的。但是我现在还不想先去提升这个 先放着吧 各位大佬可以评论区赐教呀。原创 2025-05-15 10:32:14 · 380 阅读 · 0 评论 -
每日一题python 删除元素
这个题真的很简单 唯一需要注意的是原地删除 所以你只能在这个数组里面删 但是数组长度是会随着删除进行改变的 所以就使用range(len(nums)-1,0,-1) 删除元素不影响未参与的元素。额 这个题非常简单 我在pycharm也是测试没有任何问题的 但是不知道为什么就是通不过题库测试。刚刚做三元组写半天死在排序上了 我决定写几个简单的安慰一下自己。元素的顺序可能发生改变。原创 2025-05-13 19:05:09 · 247 阅读 · 0 评论 -
每日一个Python题目 整数转罗马数字
分情况 按照题目给的提示 我最开始写的我都不想提 跟一坨没什么区别 整数类型和字符类型一直转来转去的恶心死我了 所以动动脑子思考出一个好的办法 连最基础的数字运算都没想起来 我真是要气死了。罗马数字是通过添加从最高到最低的小数位值的转换而形成的。给定一个整数,将其转换为罗马数字。欢迎各位大佬评论区指教。原创 2025-05-12 16:27:42 · 944 阅读 · 0 评论 -
每日一个有趣的Python题目
啊啊啊我真的觉得这个方法巨笨无比 一直换来换去 因为想要相加 把链表元素存储到列表里面 再转化为一个数字 相加之后再转化为字符串这样可以一个一个存储在链表中 而且在存储的时候还要转化为Int形式 因为题目要求 不可以是字符形式 真的我头都大了。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。有没有好的而且容易理解的办法啊各位大佬 求在评论区讨论。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。原创 2025-05-09 10:43:39 · 339 阅读 · 0 评论 -
每日一个有趣的python题目
取出的每个值是列表 然后进行迭代 我根本不知道有没有什么便捷的办法如果不使用Product的话 我想的还是一个个来 但是Product的意思就是每个列表取一个 按照顺序 这是一个迭代器。我的想法就是弄个字典 然后弄个列表 如果字符中的在字典中 就将其对应的值取出来 然后使用[''.join(p) for p in product(*letters_lists)]给出数字到字母的映射如下(与电话按键相同)。大概就是我给23 那么abc和def是可以进行任意的配对的。的字符串,返回所有它能表示的字母组合。原创 2025-05-12 10:56:33 · 334 阅读 · 0 评论 -
每日一个有趣的Python题目
思想就是如果找到的话 别再判断是否唯一 直接就设两个指针(这样说不严谨)往前往后找就行了 我开始的时候还判断是否唯一真的是没必要。if nums[mid]==target:#这里是找到了一个,直接扩展 不必判断是否唯一。return [-1, -1]#找不着。请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。额 在二分查找的基础上进行改进?你必须设计并实现时间复杂度为。如果数组中不存在目标值。这个题上个我发的扩展一下。原创 2025-05-12 10:18:58 · 348 阅读 · 0 评论 -
每日一个Python练习题
我的想法就是转化为字符 然后利用下标进行比较 这个好简单啊 但是不知道有没有更好的办法 欢迎各位大佬评论讨论。是一个回文整数,返回。原创 2025-05-08 21:03:43 · 223 阅读 · 0 评论 -
每日一个Python题目 最长公共前缀
然后就是每次选取第一个字符串的第一个字符 往后比 一旦存在同样位置的字符不同就return。就是思路要想好 我的思路就是比的再多 肯定不会超过字符组中的最短的那个字符串。s_length=[]#我的目的是确定要查找的最大的范围。s=(strs[0])[i]#选取第一个元素。编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。就是要注意每次i j的位置 别乱。欢迎各位大佬评论区赐教。原创 2025-05-12 18:44:51 · 256 阅读 · 0 评论 -
每日一个有趣的python题
这个题目蛮好蛮有意思的 静下心来好好分析 但是我这个貌似很耗内存呢 有没有大佬指导一下好的且简单易懂的方法。return 0#意思是全是0了或者第一个就是非数字字符返回字符0。注意特殊情况 比如+后面仍然是非数字字符咋办 比如+后面没有任何字符是空的咋办 考虑代码健壮性。result1=s.lstrip('0')#丢掉左边的。s=s.lstrip()#丢弃左侧的指定字符。写出来倒是不难 就是要注意lstrip的使用与字符串的更新。函数,使其能将字符串转换成一个 32 位有符号整数。返回整数作为最终结果。原创 2025-05-12 14:02:01 · 422 阅读 · 0 评论 -
python 每日一题 交换相邻节点
交换节点很简单 交换之后找到重新开始的点也很简单 但是需要注意的是开始的两个节点和后面的两个节点进行交换的方法是不一样的 所以要制造一个空节点 这样后续操作都是一样的。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。result=solution.swapPairs(lst)#这是链表,处理。#为了让初始的节点和后续的操作是一样的 我要制造一个虚拟的节点。#print("None") # 表示链表结束。原创 2025-05-12 19:59:00 · 449 阅读 · 0 评论 -
每日一个有趣的Python题目
额 大家不要跟我学这个 这个是超过内存限制的 我的脑子实在是太笨了 我都没意识到如果n很大的话会是一件多么可怕的事情。但是这个不是我自己想到的 我根本不会 我需要学习一下分治的思想 各位大佬不要骂我。将for 那个地方换成这个 就会使得次数减少很多。if n%2==1:#这一步是一定会执行的。真的 这数学思想 我真的泪目了。原创 2025-05-12 20:53:32 · 300 阅读 · 0 评论 -
每日一python题目
思路很简单 就是写在一个数组里面 但是这是不是不是很优啊 求问大佬有没有更好的办法?请你找出并返回这两个正序数组的。的正序(从小到大)数组。算法的时间复杂度应该为。原创 2025-05-08 19:40:16 · 341 阅读 · 0 评论 -
每日一个有趣的python题目
就是反正最后的肯定也是i在左边 j在右边 不如开始就设在开始和结尾位置 然后就开始移动 哪个短就移动哪个 看变不变。什么时候可以有更好的想法啊 一天天的就是暴力求解 请各位大佬在评论区教教我。# 移动较短的线段指针。print(result) # 输出: 49。上面那个是最初的暴力解法 那边那个是优化的。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。原创 2025-05-09 13:23:12 · 434 阅读 · 0 评论 -
每日一个Python题目
这个题很简单 但是我写的貌似运行时间有点久 也不知道是哪里出了问题 有没有大佬可以指导一下。x = x.lstrip('-') # 先把符号存起来。x=str(x)#转化为字符进行操作。如果反转后整数超过 32 位的有符号整数的范围。给你一个 32 位的有符号整数。中的数字部分反转后的结果。原创 2025-05-12 14:25:48 · 224 阅读 · 0 评论 -
每日一个Python题目
这个题好简单耶 就喜欢这种简单的 为何如此简单(只需要注意不要越界即可),返回删除后数组的新长度。删除重复出现的元素,使每个元素。原创 2025-05-09 14:18:23 · 319 阅读 · 0 评论
分享