![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python习题练习
愈努力俞幸运
这个作者很懒,什么都没留下…
展开
-
6. Z 字形变换
【代码】6. Z 字形变换。原创 2023-01-11 22:11:11 · 73 阅读 · 0 评论 -
KMP算法,686. 重复叠加字符串匹配,
总结,可以发现这四种情况是可以合并在一起写的,即a串最多复制b/2+2次,这也是一些题解为什么说a串最多复制b/2+2次。首先,要明白,如果b串的第一个字母b[0]在a串中没有找到,那么不管a串复制多少次,b串都不会是a的子串。如果b串的第一个字母b[0]在a串中能找到,那么我们看一下a串需要复制几次呢?朴素模式匹配,就是暴力,从主串第一个位置看能否匹配,然后看第二个,如此进行下去。如果你发现next数组的初始值有好几种,那么到底哪个对呢?第一种方法,用切片的方法判断b串是否是a串的子串。原创 2022-12-22 13:15:47 · 502 阅读 · 0 评论 -
取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除
例如:7 % 4 = 3, -7 % 4 = -3, 7 % -4 = 3, -7 % -4 = -3(在java、C/C++中%是取余,例中的%按取余处理。在python是数学运算:-7 % 4 = 1, 7 % -4 = -1, 结果的正负仅与除数有关)。a为负数,b为正数;a为负数,b为负数),他们之间的取余(a%b)等于|a|%|b|得到的余数加上a的符号。我们发现当两个数同号和数学中的结果是一样的,当两个数异号时和数学中的结果是不一样的。如:12%-7=5 -12%7=-5 -12%-7=-5。原创 2022-12-09 16:08:36 · 815 阅读 · 0 评论 -
11. 盛最多水的容器
11. 盛最多水的容器 - 力扣(Leetcode)https://leetcode.cn/problems/container-with-most-water/description/首先理解题意,怎么求面积的,是指两个竖线之间的距离乘以两条竖线中短的那一个对于例题,两条红色线之间的距离为7,两条竖线较短的为7,所以面积7*7=49.在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽 底边宽度 −1变短:原创 2022-12-07 12:11:42 · 57 阅读 · 0 评论 -
989. 数组形式的整数加法
第一个方法暴力第二个逐位相加让我们逐位将数字加在一起。例如计算 123+912,我们从低位到高位依次计算 3+2、2+1 和 1+9。任何时候,若加法的结果大于等于 10,把进位的 1 加入到下一位的计算中,所以最终结果为 1035。公式注意,AB两数都加完后,最后判断一下进位 carry, 进位不为 0 的话加在前面。 加法模板:原创 2022-12-05 00:13:06 · 126 阅读 · 0 评论 -
914. 卡牌分组
914. 卡牌分组 - 力扣(LeetCode)https://leetcode.cn/problems/x-of-a-kind-in-a-deck-of-cards/简单题坑有点多思路我们从 2 开始,从小到大枚举 i。由于每一组都有i 张牌,那么i 必须是卡牌总数 N 的因数。其次,对于写着数字 num的牌,如果有count_num张,由于题目要求「组内所有的牌上都写着相同的整数」,那么i必然也是count_num的因数。第二个方法,求最大公约数,有空补原创 2022-12-05 00:00:51 · 110 阅读 · 0 评论 -
840. 矩阵中的幻方。python三连双等 a==b==c
将四条穿过中心的线的 12 个值相加(即一行一列两条对角线),这四条线加起来等于 60;则中心等于 (60−45)/3=5(60-45)/3 = 5(60−45)/3=5。”5== len(a)== len(b)“等价于”5== len(a) and len(a)==len(b)“答:将这9宫格的数字放到列表中,对其排序,看是否等于list(range(1,10))就好。网格的总和是 45,因为网格必须是 1 到 9 不同的数字。对角线的和也必须是 15,题目中说了对角线与列,行的和相同。原创 2022-11-08 01:07:34 · 705 阅读 · 0 评论 -
581. 最短无序连续子数组
第一种方法就是对整个数组进行排序,那么左边第一个开始不一样的,与右边第一个开始不一样的,这两者之间的距离就是连续的无序数组。如果右边已经排好序了,肯定比左边的最大值还要大,所以这个数如果比左边最大值小,那么,这个数肯定不在右边已经排好序的数组中;如果左边已经排好序了,肯定比右边最小值还小,如果它比右边最小值大,那么这个数肯定不在左边的已经排好序的数组中。581. 最短无序连续子数组 - 力扣(Leetcode)这样就找到了两个有序数组的临界。原创 2022-10-20 01:24:25 · 104 阅读 · 0 评论 -
堆排序python实现
这也就是第一个叶子节点,原创 2022-10-09 22:39:56 · 438 阅读 · 0 评论 -
归并排序,求逆序对
辅助数组tmp还可以放到函数的外面这样会节约一些时间。原创 2022-08-26 20:58:04 · 85 阅读 · 0 评论 -
剑指 Offer 19. 正则表达式匹配
因此,本题的状态共有 m \times nm×n 种,应定义状态矩阵 dpdp ,dp[i][j]dp[i][j] 代表 s[:i]s[:i] 与 p[:j]p[:j] 是否可以匹配。转移方程: 需要注意,由于 dp[0][0] 代表的是空字符的状态, 因此 dp[i][j] 对应的添加字符是 s[i - 1] 和 p[j - 1]。dp[i - 1][j - 1] 且 s[i - 1] = p[j - 1]: 即让字符 p[j - 1] 多出现一次时,能否匹配;当 p[j - 1]!原创 2022-08-22 23:31:02 · 51 阅读 · 0 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字,约瑟夫环
f(n) 可由 f(n - 1)得到,f(n - 1)可由 f(n - 2)得到,……而F(1,m)的解 f(1) = 0 恒成立,即无论 m为何值,长度为 1 的数字环留下的是一定是数字 0。N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。第一次C被杀掉,人数变成7,D作为开头,(最终活下来的G的编号从6变成3)第二次F被杀掉,人数变成6,G作为开头,(最终活下来的G的编号从3变成0)第三次A被杀掉,人数变成5,B作为开头,(最终活下来的G的编号从0变成3);...原创 2022-08-16 00:17:30 · 86 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列,reverse函数讲解
通过debug发下错误原因为 return res.reverse().通过print(res)发现res结果并没有错,为什么返回none呢。这里有问题的就是在使用reverse函数时,返回的结果是none。剑指 Offer 57 - II. 和为s的连续正数序列。以后还是,使用切片的方式来反转列表。...原创 2022-08-09 00:35:32 · 81 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组。可以从上往下,累乘计算下三角,在从下网上累乘计算上三角。那么怎么计算b[i]呢?狗的地方就是不让用除法。如果写成下面图片的格式。原创 2022-08-06 23:36:54 · 46 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/暴力一发 稍微动一下脑子,超过数组一般的数就是众数喽。所以将数组由小到大排序,中间那个就是众数另附大神思路。摩尔投票法,很巧妙。。。。...原创 2022-08-06 00:38:00 · 60 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数
剑指 Offer 56 - I. 数组中数字出现的次数https://leetcode.cn/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/ 首先介绍异或的概念异或_百度百科 (baidu.com)https://baike.baidu.com/item/%E5%BC%82%E6%88%96/10993677?fr=aladdin 暴力代码,采用字典的标记出现几次 怎么把它们分成一个包含x,另一个包含y呢?原创 2022-08-05 23:57:24 · 52 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数,位运算,与运算
将 n右移一位(本题要求把数字 n看作无符号数,因此使用 无符号右移 操作)。若 n \& 1 = 1 ,则 n二进制 最右一位 为 1。若 n \& 1 = 0,则 n二进制 最右一位 为 0;剑指 Offer 15. 二进制中1的个数。判断 n最右一位是否为 1,根据结果计数。循环逐位判断: 当 n = 0时跳出。初始化数量统计变量 res = 0。返回统计数量 res。...原创 2022-08-03 23:56:17 · 62 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
划分左右子树: 从左到右遍历后序遍历的 [i, j]区间元素,寻找第一个大于根节点 的节点,索引记为 m。此时,可划分出左子树区间 [i,m-1] 、右子树区间 [m, j - 1]、根节点索引j ,即每个区间最后一个点为根节点。终止条件: 当i≥j ,说明此子树节点数量 ≤1 ,i==j节点数量为1,i>j说明这个区间是空的,即左子树或右子树为空(如输入【1,2,5,10,6,9,4,3】)无需判别正确性,因此直接返回 true;recur(m, j - 1): 判断 此树的右子树 是否正确。...原创 2022-08-03 23:46:55 · 56 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
Python入门--算术运算符,位运算符,比较运算符,布尔运算符,赋值运算符_愈努力俞幸运的博客-CSDN博客。怎么就算X的次幂,每次循环令x=x*x即可。剑指 Offer 16. 数值的整数次方。与运算与位运算可以参考。...原创 2022-08-02 22:35:51 · 83 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
在中序遍历中搜索根节点node的索引,可将中序遍历划分为[左子树|根节点|右子树]。根据中序遍历中的左(右)子树的节点数量,可将前序遍历划分为[根节点|左子树|右子树]。对于树的左、右子树,仍可复用以上方法划分子树的左右子树。1.树的根节点、2.左子树根节点、3.右子树根节点。前序遍历的首元素为树的根节点node的值。首先,基本的知识点要了解,可参考下面这篇文章。剑指Offer07.重建二叉树。剑指Offer07.重建二叉树。...原创 2022-08-01 23:57:32 · 78 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
2.当left和right同时不为空说明p,q分列在root的异侧(分别在左/右子树),因此root为最近公共祖先,返回root;3.当left为空,right不为空p,q都不在root的左子树中,直接返回right。1.当left和right同时为空说明root的左/右子树中都不包含p,q,返回null;,当节点p,q在节点root的异侧时,节点root即为最近公共祖先,则向上返回root。...原创 2022-07-31 22:13:28 · 1244 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
设节点node为节点p,q的某公共祖先,若其左子节点node.left和右子节点node.right都不是p,q的公共祖先,则称node是“最近的公共祖先”。若节点p在节点node的左(右)子树中,或p=node,则称node是p的祖先。否则,当p,q都在node的左子树中,则遍历至node.left;2.若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。当p,q都在node的右子树中,则遍历至node.right;...原创 2022-07-30 10:35:59 · 91 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n,逻辑运算符短路效应
if(AandB)若A为false,则B的判断不会执行(即短路),直接判定AandB为false。面试题64.求1+2+…+n(逻辑符短路,清晰图解)-求1+2+…+n-力扣(LeetCode)if(AorB)若A为true,则B的判断不会执行(即短路),直接判定AorB为true。常见的逻辑运算符有三种,即“与and”,“或or”,“非not”;剑指Offer64.求1+2+…...原创 2022-07-27 00:54:21 · 92 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
返回值返回此树的深度,即max(maxDepth(root.left),maxDepth(root.right))+1。关键点此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度等于左子树的深度与右子树的深度中的最大值+1。求树的深度需要遍历树的所有节点,下面将介绍基于后序遍历(DFS)和层序遍历(BFS)的两种解法。关键点每遍历一层,则计数器+1,直到遍历完成,则可得到树的深度。常见的BFS层序遍历(即按层遍历)。...原创 2022-07-25 23:23:31 · 1453 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数
Pythonheapq库的用法介绍_小斌哥ge的博客-CSDN博客_heapqpython。那就把所有数取它的相反数,这样,就可以用小顶堆。剑指Offer41.数据流中的中位数。Python没有大顶堆,怎么办呢?暴力求解,每次查找,都排序就好。大顶堆,小顶堆的方法。首先要把下面文章搞懂。...原创 2022-07-25 22:07:18 · 1304 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
双向链表在构建相邻节点的引用关系时,设前驱节点pre和当前节点cur,不仅应构建pre.right=cur,也应构建cur.left=pre。循环链表设链表头节点head和尾节点tail,则应构建head.left=tail和tail.right=head。纠结的点就是,为什么self.pre,self.head表示节点,好像因为力扣定义了ClassNode。排序链表节点应从小到大排序,因此应使用中序遍历“从小到大”访问树的节点。...原创 2022-07-22 16:13:45 · 214 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
如果,不想加nonlocal,则就把变量设置成self.xxx的形式,此时相当于全局变量,哪里都可以使用。因此,求“二叉搜索树第k大的节点”可转化为求“此树的中序遍历倒序的第k个节点”根据以上性质,易得二叉搜索树的中序遍历倒序为递减序列。本文解法基于此性质二叉搜索树的中序遍历为递增序列。剑指Offer54.二叉搜索树的第k大节点。第一种方法,中序遍历二叉树,输出倒数第k个。...原创 2022-07-22 16:08:15 · 110 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数
此题求拼接起来的最小数字,本质上是一个排序问题。若拼接字符串x+y>y+x,则x应在y右边;反之,若x+y原创 2022-07-22 15:59:01 · 65 阅读 · 0 评论 -
快速排序算法
代码】快速排序。原创 2022-07-20 23:10:02 · 105 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
剑指Offer32-I.从上到下打印二叉。原创 2022-07-20 23:04:57 · 90 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
节点A去往下搜时,就把这个节点A加入路径中,如果节点A,后面所有路径都不满足,就把这个节点弹出去,如果节点A后面有路径满足,将path加入到结果列表中,节点A弹出去,因为,节点A已经看完了。值得注意的是,记录路径时若直接执行res.append(path),则是将path对象加入了res;路径记录当①root为叶节点且②路径和等于目标值,则将此路径path加入res。路径恢复向上回溯前,需要将当前节点从路径path中删除,即执行path.pop()。...原创 2022-07-19 22:44:44 · 119 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
判断是否跳过若①行列索引越界或②数位和超出目标值k或③当前元素已访问过时,执行continue。标记当前单元格将单元格索引(i,j)存入集合visited中,代表此单元格已被访问过。返回值集合visited的长度len(visited),即可达解的数量。单元格入队将当前元素的下方、右方单元格的索引加入queue。单元格出队将队首单元格的索引弹出,作为当前搜索单元格。BFS实现通常利用队列实现广度优先遍历。...原创 2022-07-18 23:11:20 · 216 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
剪枝在搜索中,遇到这条路不可能和目标字符串匹配成功的情况(例如此矩阵元素和目标字符不同、此元素已被访问),则应立即返回,称之为可行性剪枝。DFS通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推。本问题是典型的矩阵搜索问题,可使用深度优先搜索(DFS)+剪枝解决。深度优先搜索可以理解为暴力遍历矩阵中所有字符串可能性。剑指Offer12.矩阵中的路径。...原创 2022-07-18 14:50:28 · 54 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序,strip()函数
strip()函数,可以删除字符串首尾的所有空格。剑指Offer58-I.翻转单词顺序。设立两个指针,界定要加入的字符。原创 2022-07-17 19:21:13 · 79 阅读 · 0 评论 -
剑指 Offer 57. 和为s的两个数字
执行j=j-1,这时候(i+1,j)指nums[i+1]+nums[j],(i+1,j),(i+2,j),...,(j-1,j)会丢失,以后,再也没有这些值。因为列表是递增的,num[i]+num[j]>target,那么这些丢失的也大于target,所以丢失没影响,这些值本来也不满足。执行i=i+1,这时候(i,j-1),(i,j-2),..(i,i+1)会丢失,同样的这些丢失的值的和也小于target,如果,num[i]+num[j]>target。如果,num[i]+num[j]......原创 2022-07-18 15:12:06 · 55 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
可始终保证指针ii左边都是奇数,指针j右边都是偶数。剑指Offer21.调整数组顺序使奇数位于偶数前面。将偶数nums[i]和奇数nums[j]交换。指针ii从左向右寻找偶数;指针j从右向左寻找奇数;记录链表复制容易犯的错误。...原创 2022-07-17 14:05:49 · 285 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
设置两个指针,一个指向第一个链表,第二个指向第二个列表,然后比较大小关系,交替前进即可。,代表当x=Truex时执行AA,否则执行BB。剑指Offer25.合并两个排序的链表。Python三元表达式写法。python三元表达式的写法。...原创 2022-07-16 23:09:55 · 152 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
则倒数第k个节点,也就是从头开始数第n-k+1个节点。剑指Offer22.链表中倒数第k个节点。第2节点n2,dic[2]=n2。第n节点nn,dic[n]=nn.第1节点n1,dic[1]=n1。把每个节点放到字典中。原创 2022-07-15 21:15:52 · 101 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
思路一模一样,注释代码会超时,啊这。剑指Offer18.删除链表的节点。原创 2022-07-15 20:39:36 · 85 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
剑指Offer46.把数字翻译成字符串。原创 2022-07-15 18:15:50 · 66 阅读 · 0 评论