
Python
ciwei24456
这个作者很懒,什么都没留下…
展开
-
python 八大排序算法
选择排序是一种简单直观的排序算法,其工作原理是在未排序序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后继续寻找剩余未排序序列中的最小(或最大)元素,放到已排序序列的末尾,直至所有元素排序完毕。插入排序是一种简单直观的排序算法,其工作原理是把第一个元素看做已排序的圆度,然后将未排序的元素插入到已排序的部分中的合适位置,直到所有元素排好序。基数排序的基本思想是先将数字按照个位数上数字的大小进行排序,排序之后再将已经排过序的数字再按照十位数上数字的大小进行排序,依次类推。原创 2024-03-19 13:27:56 · 454 阅读 · 0 评论 -
python print函数
如果使用flush=True之后,会在print结束之后,不管你有没有达到显示条件,都会立即将内存中的东西显示到屏幕上,清空缓存里面的内容,如打开文件并向文件里面写入内容时,文件未关闭f.close()之前,打开的文件里面是看不到写入的内容的,如果这时需要能看到就将flush改为True即可。我们可以通过改变该参数使print()函数的内容输出到指定的文件中。object:表示要输出的对象,可以输出多个对象,多个对象之间用逗号隔开,无论什么类型的数据,包括但不局限于:数值型,布尔型,列表变量,字典变量…..原创 2022-08-15 16:29:25 · 1276 阅读 · 0 评论 -
剑指offer 二叉搜索树与双向链表
题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构4.你不用输出双向链表,程序会根据你的返回值自动打印输出输入描述:二叉树的根节点返回值描述:双向链表的其中一个头节点。示例1输入:{10,6,14,4,8,12原创 2022-03-13 19:23:42 · 87 阅读 · 0 评论 -
剑指offer 调整数组顺序使奇数位于偶数前面(一)
题目描述:输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路:定义两个数组,一个为奇数数组,一个为偶数数组判断数组中的数为奇数时,加入到奇数数组;判断数组中的数为偶数时,加入到偶数数组;将数组遍历完成后,奇数数组+偶数数组即为最后所求的数组(相对位置不变)。python代码实现:class Solution: def reOrderArray(se原创 2022-03-11 22:09:56 · 78 阅读 · 0 评论 -
剑指offer 剪绳子
题目描述:给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m <= n ),每段绳子的长度记为 k[1],…,k[m] 。请问 k[1]k[2]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18 。解题思路:动态规划的方法:先自上而下分析,在长度为n的绳子所求为f(n),剪下一刀后剩下的两段长度是i和n-i,在这个上面还可能继续原创 2022-03-09 23:47:27 · 78 阅读 · 0 评论 -
剑指offer 重建二叉树
题目描述:给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length == pre.length2.pre 和 vin 均无重复元素3.vin出现的元素均出现在 pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比示例1输入:[1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6]返回原创 2022-03-06 22:40:51 · 264 阅读 · 0 评论 -
剑指offer 二叉树的下一个结点
题目描述:给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示示例:输入:{8,6,10,5,7,9,11},8返回:9解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只会打印9,原创 2022-03-06 22:23:15 · 123 阅读 · 0 评论 -
剑指offer 二维数组的查找
题目描述:在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。示例1输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,1原创 2022-03-04 16:51:03 · 276 阅读 · 0 评论 -
剑指offer 二叉树中和为某一值的路径(一)
题目描述:给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n例如:给出如下的二叉树,sum=22,返回true,因为存在一条路径 5→4→11→2的节点值之和为 22示例1输入:{5,4,8,1,11,#,9,#,#,2,7},22返回值:true解题思路:采用递原创 2022-03-03 22:24:29 · 80 阅读 · 0 评论 -
剑指offer 调整数组顺序使奇数位于偶数前面(二)
题目描述:输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,对奇数和奇数,偶数和偶数之间的相对位置不做要求,但是时间复杂度和空间复杂度必须如下要求。数据范围:0≤n ≤ 50000,数组中每个数的值 0 ≤val≤10000要求:时间复杂度 O(n),空间复杂度 O(1)。示例1输入:[1,2,3,4]返回值:[1,3,2,4]说明:[3,1,2,4]或者[3,1,4,2]也是正确答案原创 2022-03-03 22:05:12 · 80 阅读 · 0 评论 -
剑指offer 判断是不是二叉树
题目描述:输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。样例解释:样例二叉树如图,为一颗平衡二叉树注:我们约定空树是平衡二叉树。返回值描述:输出一个布尔类型的值示例1输入:{1,2,3,4,5,6,7}返回值:true示例2输入:{}返回值:t原创 2022-03-03 17:39:17 · 79 阅读 · 0 评论 -
剑指offer 翻转单词序列
题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?示例:输入:"nowcoder. a am I"返回值:"I am a nowcoder."解题思路:1、先将字符串多余原创 2022-03-02 22:46:32 · 109 阅读 · 0 评论 -
剑指offer 跳台阶扩展问题
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。解题思路:考虑最后一步是跳几阶到达目标位置的。主要分析:1.令f(n)表示n阶台阶总的跳法2.假设最后只跳一步,那么f(n) = f(n-1); 最后跳两步,那么f(n) = f(n-2);以此类推,可知总的跳法为f(n) = f(n-1) + f(n-2) +…+f(0)那么f(n-1) = f(n-2) + f(n-3) +…+f(0);3.可知 f(n)原创 2022-03-02 22:35:56 · 470 阅读 · 0 评论 -
剑指offer 跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路:可以通过推理来找出。第3位可以由第1阶台阶跳2阶或第2阶段跳1阶段得出。第4位可以由第2阶台阶跳2阶或第3阶段跳1阶段得出。第5位可以由第3阶台阶跳2阶或第4阶段跳1阶段得出。最后可以得出:dp[i]=dp[i-1]+dp[i-2]或者:假设f[i]表示在第i个台阶上可能的方法数。逆向思维。如果从第n个台阶进行下台阶,下一步有2中可能,一种走到第n原创 2022-03-02 22:26:58 · 158 阅读 · 0 评论 -
剑指offer 构建乘积数组
题目描述:给定一个数组 A[0,1,…,n-1] ,请构建一个数组 B[0,1,…,n-1] ,其中 B 的元素 B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1](除 A[i] 以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定 B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2])对于 A 长度为 1 的情况,B 无意义,故而无法构建,用例中不包括这种情况。示例1输入:[1,2,3,4,5]转载 2022-03-01 22:27:48 · 74 阅读 · 0 评论 -
剑指offer 不用加减乘除做加法
题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:第一步:不考虑进位对每一位相加。0 加 0、1 加 1的结果都是0,0 加 1和 1加0的结果都是1。和位运算 异或 的结果一样;第二步:对 0加0,1加0,0加1而言,都不会产生进位,只有在1加1时,会向前产生一个进位。可以当做两个数先做 位与 运算,然后再向左移动一位。只有两个数都是1时,得到的结果是1,其余都是0.第三步:把前两步的结果都相加。第三步相加的过程依然是重复前两步,直到不产生进位为止。原创 2022-03-01 22:07:05 · 212 阅读 · 0 评论 -
剑指offer 买卖股票的最好时机
题目描述:假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天2.如果不能获取到任何利润,请返回03.假设买入卖出均无手续费解题思路:暴力法:需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。形式上,对于每组 i 和 j(其中原创 2022-03-01 17:46:56 · 75 阅读 · 0 评论 -
剑指offer 数字在升序数组中出现的次数
题目描述:给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数示例1输入:[1,2,3,3,3,3,4,5],3返回值:4解题思路:1、看到非降序数组,想到二分法获取目标值的前后下标,即获取目标值在数组中的长度关键是运用微妙的 + 0.5 和 - 0.5,找出数组中第一个大于k和最后一个小于k的数的下标,相减就可以获得k在数组中的长度Python代码实现:class Solution: def find_k(self,data,k):原创 2022-02-25 10:32:36 · 565 阅读 · 0 评论 -
剑指offer 两个链表的第一个公共节点
题目描述:输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。输入描述:输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和第二个链表的公共部分。 后台会将这3个参数组装为两个链表,原创 2022-02-25 08:32:00 · 440 阅读 · 0 评论 -
剑指offer 连续子数组的最大和
题目描述:输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。示例1输入:[1,-2,3,10,-4,7,2,-5]返回值:18说明:经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18 Python代码实现:class Solution: def FindGreatestSumOfSubArray(self , array: List[int]) -> int:原创 2022-02-24 14:59:34 · 168 阅读 · 0 评论 -
剑指offer 数组中出现次数超过一半的数字
题目描述:给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。示例1输入:[1,2,3,2,2,2,5,4,2]返回值:2解题思路:哈希表出现次数最多的元素大于 n/2 次,所以可以用哈希表来快速统计每个元素出现的次数1、使用哈希映射来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次原创 2022-02-24 11:59:39 · 70 阅读 · 0 评论 -
Python 类方法、实例方法、静态方法
类方法:定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);调用:类和实例对象都可以调用。实例方法:定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);调用:只能由实例对象调用。静态方法定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;调用:转载 2022-02-24 10:37:23 · 187 阅读 · 0 评论 -
剑指offer 从上往下打印二叉树
题目描述:不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。示例1输入:{8,6,10,#,#,2,1}返回值:[8,6,10,2,1]思路:1)采用二叉树的层次遍历法再结合队列的先进先出机制/辅助栈进行解题对二叉树进行层次遍历,使用栈/队列存储遍历节点,并将该节点存入返回列表,判断该节点是否存在左右子树,若存在左右子树原创 2022-02-23 17:11:11 · 178 阅读 · 0 评论 -
剑指offer 包含min函数的栈
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。此栈包含的方法有:push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素示例:输入: [“PSH-1”,“PSH2”,“MIN”,“TOP”,“POP”,“PSH1”,“TOP”,“MIN”]输出: -1,2,1,-1解析:"PSH-1"表示将-1压原创 2022-02-23 16:03:44 · 552 阅读 · 0 评论 -
剑指offer 顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]则依次打印出数字[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]Python代码实现:class Solution: def printMatrix(self , matrix: List[List[int]]) -> List[int]:原创 2022-02-22 17:43:11 · 318 阅读 · 0 评论 -
剑指offer对称的二叉树
题目描述:给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的下面这棵二叉树不对称。采用递归方法Python代码实现:class Solution: def isSymmetrical(self , pRoot: TreeNode) -> bool: # write code here if not pRoot: return True def compare(A,B):原创 2022-02-22 17:11:43 · 594 阅读 · 0 评论 -
Python dict.clear()与dict={}的区别
我们知道重置字典可以使用 clear()函数来实现,也可以使用{}置空,但是这两者实际上是有区别的例如从下面两个例子来查看:例子1:>>> x = {}>>> y = x>>> x["hello"] = "world">>> y{'hello': 'world'}>>> x{'hello': 'world'}>>> x = {}>>> x{}>>转载 2022-02-22 16:52:39 · 461 阅读 · 0 评论 -
剑指offer 二叉树的镜像
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。比如:源二叉树镜像二叉树解题思路:根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。解题步骤:1、特判:如果pRoot为空,返回空2、交换左右子树3、把pRoot的左子树放到Mirror中镜像一下4、把pRoot的右子树放到Mirror中镜像一下5、返回根节点rootPython代码实现:class Solution: def Mirror(self , pR原创 2022-02-21 09:32:46 · 195 阅读 · 0 评论 -
剑指offer 合并两个排序的列表
描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:解题思路:特殊情况:如果有一个链表为空,返回另一个链表如果pHead1 节点值比pHead2小,下一个节点应该是 pHead1,应该return pHead1,在return之前,指定pHead1的下一个节点应该是pHead1.next和pHead2俩链表的合原创 2022-02-21 09:20:24 · 429 阅读 · 0 评论 -
剑指offer 链表中环的入口
题目描述:给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这两段组装成一个无环或者有环单链表返回值描述:返回链表的环的入口结点即可,我们后台程序会打印这个结点对应的结点值;若没有,则返回对应编程语言的空结点即可。思路1:设置一快一慢两原创 2022-02-20 17:41:19 · 421 阅读 · 0 评论 -
剑指offer 链表中倒数最后k个结点
题目描述:输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。示例1输入:{1,2,3,4,5},2返回值:{4,5}说明:返回倒数第2个节点4,系统会打印后面所有的节点来比较。思路:设置两个指针指向头结点。然后快指针往前移动k-1步(这是为了两个指针之间相差k)。最后快慢指针同时前进,当快指针到达末尾时,慢指针正好指向倒数k结点上。python代码实现class Solution: def F原创 2022-02-20 16:52:30 · 666 阅读 · 0 评论 -
剑指offer 删除链表的节点
题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点示例1:输入:{2,5,1,9},5返回值:{2,1,9}说明:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 2 -> 1 -> 9解题思路:根据题目描述及所给的例子转载 2022-02-19 22:36:02 · 82 阅读 · 0 评论 -
剑指offer 打印从1到最大的n位数
题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。class Solution: def printNumbers(self , n: int) -> List[int]: # write code here res=[] number=10**n for i in range(1,number): res.appen原创 2022-02-19 22:15:49 · 123 阅读 · 0 评论 -
剑指offer 二进制中1的个数
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。这个转载 2022-02-19 22:04:06 · 73 阅读 · 0 评论 -
pycharm allure环境配置问题
一般情况下要进行以下环境的配置:1、allure的下载下载网址(allure官网):http://allure.qatools.ru/2、allure的安装将刚才下载的文件解压到你用于存放它的位置(不建议放c盘),我存放在了D:\allure)中解压完成后,进入文件夹bin中此时,双击其中的allure.bat文件,会有一个窗口一闪而过,此时安装成功3、allure的环境配置选中“我的电脑”,右键,选择属性->高级系统设置选择环境变量,在系统变量中的Path将刚刚bin文件夹所在的目原创 2022-02-14 10:56:29 · 2787 阅读 · 0 评论 -
Python中的if __name__ == ‘__main__‘
1、简单来说,name == ‘main’:假如你叫小明.py,在朋友眼中,你是小明(name == ‘小明’);在你自己眼中,你是你自己(name == ‘main’)。if name == 'main’的意思是:当.py文件被直接运行时,if name == 'main’之下的代码块将被运行;当.py文件以模块形式被导入时,if name == 'main’之下的代码块不被运行。2、if name == 'main’相当于Python模拟的程序入口,Python本身并没有这么规定,这只是一种编码习转载 2022-02-14 09:28:58 · 5340 阅读 · 0 评论 -
python安装pyautogui
1、安装使用pip进行安装,pip install pyautogui在直接安装的时候会出现如上的错误,由于pygetwindow安装的版本是0.0.4,所以出现了错误ERROR: Complete output from command python setup.py egg_info:ERROR: Traceback (most recent call last):File "<string>", line 1, in <module>File "C:\Users\1转载 2022-02-11 17:33:04 · 1912 阅读 · 0 评论