自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 问答 (1)
  • 收藏
  • 关注

原创 将Python源码打包成egg文件

将Python源码打包成egg文件1.安装setuptools包,在windows电脑,直接在Python环境下用pip install安装即可2.将需要打包的文件放到一个文件夹下3.在文件夹的目录级别创建setup.py文件4.在setup.py文件中写入5.在cmd窗口运行python setup.py bdist_egg6.在dist文件夹下即可看到egg文件,通过import可以引用1.安装setuptools包,在windows电脑,直接在Python环境下用pip install安装即可2.

2021-03-23 17:03:57 1671

原创 求链表中的倒数第k个节点

#求链表中的倒数第k个节点#创建链表#定义节点class Node: def __init__(self,data = None, next = None): self.data = data self.next = next#单个创建节点node1=Node(1)node2=Node(2)node3=Node(3)node4=Node(1)node5=Node(2)node6=Node(3)node1.next=node2node2.next

2020-09-11 00:34:34 97

原创 把一个字符串转换成整数(2)

#把一个字符串转换成整数'''考虑字符串是否有非数字字符和正负号,考虑最大的正整数和最小的负整数以及溢出当输入的字符串不能转换成整数时,如何做错误处理鲁棒性:对空的判断'''s=input()#空的判断if(len(s)==0): print('字符串为空')else: su=0 n=1 for i in range(0,len(s)-1): #非数字字符的判断 if(s[len(s)-i-1].isdigit()):

2020-09-11 00:18:33 351

原创 把一个字符串转换成整数(1)

#把一个字符串转换成整数s=input()su=0n=1for i in range(len(s)): su=su+int(s[len(s)-i-1])*n n=n*10print(su)

2020-09-11 00:00:23 112

原创 求排序数组的相邻元素最大差值(1)

'''有一个无序整形数组,求出该数组排序后的任意两个相邻元素的最大差值解法1,使用任意一种时间复杂度为O(nlogn)的排序算法给原数组排序,然后遍历排好序的数组,并对每两个相邻元素求差,最终得到最大差值。'''s=[3,5,2,9,6,4,8,13,16]s=sorted(s)print(s)l=[]for i in range(len(s)-1): l.append(s[i+1]-s[i])print(max(l))...

2020-09-07 22:09:14 376

原创 判断是否是2的正整数次幂(3)

'''实现一个方法,判断一个正整数是否是2的整数次幂(如16是2的4次方,返回true)。要求性能尽可能高方法3:对于一个整数n,只需要计算二进制下按位运算n&(n-1)的结果是不是0,'''def isPowerOf2(num): if(num&(num-1)): return False else: return Trueprint(isPowerOf2(16))...

2020-09-02 09:22:16 164

原创 判断是否是2的正整数次幂(2)

'''实现一个方法,判断一个正整数是否是2的整数次幂(如16是2的4次方,返回true)。要求性能尽可能高方法2:创建一个中间变量temp,初始值是1。进入循环,让temp和目标比较,如果相等,证明是2的整次数幂,不相等,就让temp增大一倍(通过移位运算),继续循环比较。当temp大于目标,说明不是。'''def isPowerOf2(num): temp=1 while(temp<=num): if(temp==num): retu

2020-09-02 09:12:17 226 1

原创 判断是否是2的整次数幂(1)

'''实现一个方法,判断一个正整数是否是2的整数次幂(如16是2的4次方,返回true)。要求性能尽可能高方法1:创建一个中间变量temp,初始值是1。进入循环,让temp和目标比较,如果相等,证明是2的整次数幂,不相等,就让temp增大一倍,继续循环比较。当temp大于目标,说明不是。'''def isPowerOf2(num): temp=1 while(temp<=num): if(temp==num): return True

2020-09-02 09:09:52 165

原创 最大公约数(4)

'''最大公约数(4):通过移位和更相减损术共同求取getGreatestCommonDivisor简写为gcd1,当a和b都为偶数,gcd(a,b)=2*gcd(a/2,b/2)=2*gcd(a>>1,b>>1)2,当a为偶数,b为奇数,gcd(a,b)=gcd(a/2,b)=gcd(a>>1,b)3,当b为偶数,a为奇数,gcd(a,b)=gcd(a,b/2)=gcd(a,b>>1)4,当a和b都为奇数,先利用更相减损术运算一次,gcd(a,b

2020-09-02 01:53:24 78

原创 最大公约数(3)

'''最大公约数(3):更相减损术,两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数'''def getGreatestCommonDivisor(a,b): if(a==b): print(a) big=0 small=0 if(a>b): big=a small=b else: big=b small=a if(smal

2020-09-02 01:27:16 188

原创 最大公约数(2)

'''最大公约数(2):辗转相除法,两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。'''def getGreatestCommonDivisor(a,b): big=0 small=0 if(a>b): big=a small=b else: big=b small=a if(small!=0): if(big%small==0)

2020-09-02 01:18:53 130

原创 最大公约数(1)

'''求最大公约数(1):暴力枚举法,从较小整数的一半开始,试图找到一个合适的整数,看看这个整数能否被a和b同时整除'''def getGreatestCommonDivisor(a,b): big=0 small=0 if(a>b): big=a small=b else: big=b small=a if(big%small==0): print(small) f

2020-09-02 01:11:43 234

原创 最小栈的实现

#-*- coding : utf-8 -*-'''实现一个栈,该栈带有出栈(pop)、入栈(push)、取最小元素(getMin)3个方法。要保证这3个方法的时间复杂度都是O(1)'''class MinStack(): #定义列表 def __init__(self): self.stack=[] #入栈 def push(self,value): self.stack.append(value) #出栈 def

2020-09-02 00:59:54 63

原创 有环链表的入环节点

'''有环链表,求入环节点:假设从链表头节点到入环点的距离是D,从入环点到两个指针首次相遇点的距离是S1,从首次相遇点回到入环点的距离是S2。指针p1一次只走1步,所走的距离是D+S1指针p2一次走2步,多走了n(n>=1)整圈,所走的距离是D+S1+n(S1+S2)由于p2的速度是p1的2倍,所以所走的距离也是p1的2倍,因此:2(D+S1)=D+S1+n(S1+S2),则D=(n-1)(S1+S2)+S2'''class Node: def __init__(self,dat

2020-08-30 17:21:17 122

原创 链表中环的长度

'''环的长度:当两个指针首次相遇,证明链表有环的时候,让两个指针从相遇点继续循环前进,,并统计前进的循环次数,直到两个指针第2次相遇。此时,统计出来的前进次数就是环长。'''class Node: def __init__(self,data = None, next = None): self.data = data self.next = next#单个创建节点node1=Node(5)node2=Node(3)node3=Node(7)nod

2020-08-29 22:02:14 730

原创 判断链表是否有环(3)

'''方法3:首先创建两个指针p1和p2,让它们同时指向这个链表的头结点。然后开始一个大循环,在循环体中,让指针p1每次向后移动一个节点,让指针p2每次向后移动两个节点,然后比较两个指针指向的节点是否相同。如果相同,则可以判断出链表有环,如果不同,则继续下一次循环。'''class Node: def __init__(self,data = None, next = None): self.data = data self.next = next#单个创

2020-08-29 21:35:44 76

原创 判断链表是否有环(2)

'''方法二:首先创建一个以节点ID为Key的HashSet集合,用来存储曾经遍历过的节点。然后同样从头结点开始,依次遍历单链表中的每一个节点。每遍历一个新节点,都用新节点和HashSet集合中存储的节点进行比较,如果发现HashSet中存在与之相同的节点ID,则说明链表有环,如果HashSet中不存在与新节点相同的节点ID,就把这个新节点ID存入HashSet中,之后进入下一节点,继续重复刚才的操作。'''class Node: def __init__(self,data = None

2020-08-29 20:07:33 71

原创 判断链表是否有环(1)

#-*- coding : utf-8 -*-#判断链表是否有环'''方法1.从头结点开始,依次遍历单链表中的每一个节点。每遍历一个新节点,就从头检查新节点之前的所有节点,用新节点和此节点之前的所有节点依次做比较。如果发现新节点和之前的某个节点相同,则说明该节点被遍历过两次,链表有环;如果之前的所有节点中不存在与新节点相同的节点,就继续遍历下一个新节点,继续重复刚才的操作。时间复杂度为O(n**2),空间复杂度为O(1)'''class Node: def __init__(self

2020-08-28 14:45:00 140

原创 数据结构之排序比较

'''排序算法 平均时间复杂度 最坏时间复杂度 空间复杂度 是否稳定排序冒泡排序 O(n**2) O(n**2) O(1) 稳定鸡尾酒排序 O(n**2) O(n**2) O(1) 稳定快速排序 O(nlogn) O(n**2) O(logn)

2020-08-28 10:59:14 61

原创 数据结构之桶排序(python实现)

#-*- coding : utf-8 -*-#每一个桶代表一个区间范围,里面可以承载一个或多个元素'''1.创建桶,并确定每一个桶的区间范围2.遍历原始数列,把元素对号入座放入各个桶中3.对每个桶内部的元素分别进行排序4.遍历所有的桶,输出所有元素'''def buckerSort(string): #1.得到数列的最大值 max1 = string[0] for i in range(len(string)): if (max1 < stri

2020-08-28 10:53:38 143

原创 数据结构之计数排序(python实现)

def countSort(string): #得到数列的最大值 max1=string[0] for i in range(len(string)): if(max1<string[i]): max1=string[i] #根绝数列最大值创建数组 matrix=[0 for i in range(max1+1)] print(matrix) #遍历数列,填充数组 for i in range(le

2020-08-28 10:01:14 76

原创 数据结构之堆排序(python实现)

'''特性:1.最大堆的堆顶是整个堆中的最大元素2.最小堆的堆顶是整个堆中的最小元素堆排序算法的步骤:1.把无序数组构建成二叉堆。需要从小到大排序,则构建成最大堆;需要从大到小排序,则构建成最小堆。2.循环删除堆顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶。'''def downAdjust(string,parentIndex,length): #temp保存父节点值,用于最后的赋值 temp=string[parentIndex] childIndex=pare

2020-08-27 22:59:50 132

原创 数据结构之快速排序(python实现)

#-*- coding : utf-8 -*-'''快速排序:属于交换排序,通过元素之间的比较和交换位置来达到排序的目的分治法:在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成两个部分平均时间复杂度O(nlogn)一般选择数列的第一个元素为基准元素,也可以随机选择一个元素作为基准元素''''''一、双边循环法设置右指针和左指针,指向数列的最左和最右两个元素第一次循环,从右指针开始,让指针所指向的元素和基准元素做比较。如果大

2020-08-26 17:44:44 167

原创 数据结构之鸡尾酒排序(python实现)

'''冒泡排序的每一轮是从左到右来比较元素,进行单向的位置交换鸡尾酒排序的元素比较和交换过程是双向的:第一轮是从左向右,第二轮是从右向左,以此类推'''a=[2,3,4,5,6,7,8,1]index=0#外环控制回合for i in range(int(len(a)/2)): if((i+1)%2!=0): isSorted = True #内环实现冒泡处理:每一轮会把最大值冒泡至最后 for j in range(len(a)-1-i

2020-08-25 20:28:04 240 2

原创 数据结构之冒泡排序及优化(python实现)

#随机数列a=[5,8,6,3,9,2,1,7]#一、双循环实现冒泡排序#外环控制回合for i in range(len(a)-1): #内环实现冒泡处理:每一轮会把最大值冒泡至最后 for j in range(len(a)-1-i): if(a[j]>a[j+1]): n=a[j] a[j]=a[j+1] a[j+1]=nprint(a)#二、冒泡排序的优化,每轮排序后判断是否有

2020-08-25 20:14:35 139

原创 数据结构之排序算法分类

一、根据时间复杂度不同,主流排序算法可以分为三大类:1.时间复杂度为O(n**2)的排序算法冒泡排序选择排序插入排序希尔排序(希尔排序比较特殊,他的性能略优于O(n**2),但又比不上O(nlogn)),姑且把它归入本类2.时间复杂度为O(nlogn)的排序算法快速排序归并排序堆排序3.时间复杂度为线性的排序算法计数排序桶排序基数排序二、根据稳定性,划分为稳定排序和不稳定排序1.如果值相同的元素在排序后仍然保持着排序前的顺序,则这样的排序算法是稳定排序2.如果值相同的元素在排

2020-08-25 19:29:31 144

原创 数据结构之二叉树(python实现)

#创建二叉树,class Node:def init(self,data):self.left=Noneself.right=Noneself.data=data#插入数据def insert(self,data):if(self.data):if(data<self.data):if(self.left is None):self.left=Node(data)else:self.left.insert(data)elif(data>self.data):if(s

2020-08-24 09:53:23 136

原创 数据结构之散列表(python实现)

#-- coding : utf-8 --“”"create on 2020/8/20 22:51filename:sanliebiao.py“”"#散列表也叫哈希表,提供键值对的映射关系#python中有字典,可直接使用key1,value1,key2,value2=’’d = {key1 : value1, key2 : value2 }#访问print(d[key1])#更新d[key1]=‘ddd’#删除del d[key1]#删除key1对应的值d.clear()#删

2020-08-20 23:13:16 202

原创 数据结构之队列(python实现)

#-- coding : utf-8 --“”"create on 2020/8/20 22:28filename:duilie.py“”"#队列先入先出class Enqueue():#定义队列def init(self):self.enqueue=[]#入队def push(self,value):self.enqueue.append(value)#出队def pop(self):self.enqueue.pop(0)#判断空def is_empty(self):r

2020-08-20 22:42:53 63

原创 数据结构之栈(python实现)

#-- coding : utf-8 --“”"create on 2020/8/20 22:09filename:zhan.py“”"#栈中的元素先入后出#可由数组来实现,也可用链表来实现class Stack():#定义列表def init(self):self.stack=[]#入栈def push(self,value):self.stack.append(value)#出栈def pop(self):if self.stack:self.stack.pop()e

2020-08-20 22:27:33 75

原创 数据结构之链表(python实现)

#-- coding : utf-8 --“”"create on 2020/8/20 20:17filename:lianbiao.py@author:daizhanwen“”"#以单链表为例#创建链表#定义节点class Node:def init(self,data = None, next = None):self.data = dataself.next = next#单个创建节点node1=Node(1)node2=Node(2)node3=Node(3)nod

2020-08-20 21:30:15 134

原创 数据结构之数组的增删改查(python实现)

#-- coding : utf-8 --“”"create on 2020/8/20 19:55filename:shuzu.py“”"a=[1,2,3,4]#数组的读取print(a[1])#数组的更新a[1]=5print(a[1])#数组的插入情况#尾部插入,尾部有空余位置,直接插入即可a.append(6)print(a)#中间插入,把后边元素后移,将元素放到指定位置index=2#补充0,做为空余位置,根据插入元素决定个数a.append(0)size=le

2020-08-20 20:16:46 575

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除