![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
zeronose
这个作者很懒,什么都没留下…
展开
-
回溯法专题--回溯法总结
文章目录前言一、问题一:二、解决主要问题三、回溯法模板前言回溯法 - - 本质就是利用递归算法是纯暴力搜索 - - 一 一列举一、问题一:既然是纯暴力搜索,我直接用暴力循环不就行了吗,为什么要用回溯法??解答:举例,数组[1,2,3],找长度为2的所有子集,不能重复。此时我可以用两层for循环解决这个问题。但是我有一个长度为100的数组,找长度为50的所有子集呢????总不能for循环嵌套50次吧。此时就可以用回溯法来求解,回溯法就是通过递归来控制有多少层for循环,递归里的每一层其原创 2022-03-22 22:24:23 · 790 阅读 · 0 评论 -
再看递归_
定义:函数直接或间接调用自己四个要素:1.接受的参数2.返回值3.终止的条件4.递归拆解:如何递归下一层# 伪代码recursion(n): # 接受的参数 if n == 0: # 终止的条件 return 0 m = recorsion(n-1) return m...原创 2022-03-13 16:54:23 · 54 阅读 · 0 评论 -
python常用数据类型
原创 2022-03-12 22:42:37 · 1012 阅读 · 0 评论 -
python常用数据结构
原创 2022-03-12 22:41:06 · 1464 阅读 · 0 评论 -
二叉树的按层遍历
求二叉树的最大宽度用map序列化:反序列化按层序列化按层反序列化原创 2022-03-11 01:42:07 · 461 阅读 · 0 评论 -
二叉树__
先序,中序,后序不是递归遍历的本质,递归遍历的本质是递归序。每个结点都要经过三次第一次经过就打印是先序第二次经过打印是中序第三次经过打印是后序递归实现先序,中序,后序非递归实现:先序:后序:后序:一个栈实现中序:...原创 2022-03-10 23:22:23 · 258 阅读 · 0 评论 -
查看链表是否有环
查看链表是否有环,有环则返回第一个入环点,无环则返回None原创 2022-03-10 01:39:09 · 147 阅读 · 0 评论 -
链表常见面试题
class Node: def __init__(self, x): self.value = x self.next = Noneclass LinkedListMid: def __init__(self): self.size = 0 self.head = Node(0) def midOrUpMidNode(self, head): if head is None or head.next.原创 2022-03-10 01:15:34 · 270 阅读 · 0 评论 -
排序总结_
原创 2022-03-09 11:17:56 · 61 阅读 · 0 评论 -
桶排序__不基于比较的排序
计数排序:有确定的合适范围class CountSort: def countSort(self, arr): if arr is None or len(arr)<2: return max_ = 0 for i in range(len(arr)): max_ = max(max_, arr[i]) bucket = [0 for i in range(max_+1)] .原创 2022-03-09 02:52:52 · 93 阅读 · 0 评论 -
前缀树--
原创 2022-03-08 23:19:55 · 47 阅读 · 0 评论 -
比较器--
原创 2022-03-08 01:35:08 · 71 阅读 · 0 评论 -
堆排序以及堆排序优化
class HeapSort: # 堆排序:先将数组中的数据通过heapInsert生成大根堆 # 生成大根堆之后,将头与最后一个交换,此时最后一个为最大值,heapSize-1 # 将交换后的堆通过heapify再生成大根堆,再交换,重复如此步骤,此为堆排序 # 堆排序额外空间复杂度O(1) def heapsort(self, arr): if arr is None and len(arr) < 2: return原创 2022-03-08 00:30:50 · 429 阅读 · 0 评论 -
堆(python实现,伪代码)
完全二叉树,上面层都是满的,不满的层也是从左到右要变满的结点计算:1.计算结点时是向下取整2.只有头结点的父结点是自己class Heap: # 堆就是用数组实现完全二叉树 # 1.大根堆 def put(self,arr, value, limit, heap_size=0): if heap_size == limit: print('堆满了') heap = arr heap[heap_size.原创 2022-03-07 23:21:48 · 554 阅读 · 0 评论 -
快速排序-
快速排序1.0时间复杂度:O(N^2)class QuickSort: def quick_sort(self, arr): if arr is None or len(arr) < 2: return self.process1(arr, 0, len(arr) - 1) def process1(self, arr, l, r): if l >= r: return原创 2022-03-07 20:05:55 · 74 阅读 · 0 评论 -
partition问题
class Partition: # partition过程 # 给定一个数组arr,和一个整数num。请把小于等于num的数放在数组左边, # 大于num的数放在数组的右边。这里num为数组的r # 要求额外空间复杂度为O(1),时间复杂度为O(N) def partition(self, arr, l, r): if l > r: return -1 if l == r: ret原创 2022-03-07 16:35:31 · 360 阅读 · 0 评论 -
归并排序(python实现)
class MergeSort: # 归并排序,本质上是递归,先左边有序,右边有序,然后merge一下 def merge_sort(self, arr): if arr == None or len(arr) < 2: return self.process(arr, 0, len(arr)-1) def process(self, arr, l, r): if l == r: .原创 2022-03-07 02:04:53 · 2785 阅读 · 0 评论 -
哈希表基础
有序哈希表:1.尽管保存时是无序的,有序哈希表还是会生成有序的存储2.有序哈希表的增、删、改、查的时间复杂度都是O(logN)原创 2022-03-06 17:45:37 · 69 阅读 · 0 评论 -
递归(python实现)
# 递归法获取最大值class GetMax: # 求arr中的最大值 def get_max(self, arr): return self.process(arr, 0, len(arr)-1) # arr[l...r]范围上求最大值 def process(self, arr, l, r): # arr[l...r]范围上只有一个数,直接返回 if l == r: return arr[l]原创 2022-03-06 16:17:05 · 736 阅读 · 0 评论 -
二分法(python实现)
# 二分法,一般用于有序的,但不绝对,无序有时也可以用,具体问题具体分析。当看到有序二字时,先想到二分。时间复杂度为O(logN)# 注意 mid = (L+R)/2 可以写成 mid = L + ((R-L)>>2)后者在计算很大的数时,容错率更高,推荐用后者class Dichotomy: def dichotomy(self, arr, num): if arr == None or len(arr) == 0: return False原创 2022-03-05 23:47:29 · 1577 阅读 · 0 评论 -
链表基本问题
1.单链表和双链表的反转class Link(): # 单链表和双链表的反转 def node(self, value): self.value = value self.next = None def doublenode(self, value): self.value = value self.last = None self.next = None def nodereverse(s原创 2022-02-22 02:23:09 · 72 阅读 · 0 评论 -
三种排序(选择,冒泡,插入)python版
class select: def select_sort(self): # 选择排序 # 将第一个与剩下的进行比较,找到最小的,然后将最小的与第一个进行交换,此时第一个为最小的 # 接着将第二个与剩下的进行比较,找到最小的,然后将最小的与第二个进行交换,此时第二个为第二小的 # 以此类推,进行排序,此为选择排序,时间复杂度为O(n^2) arr = [7, 2, 9, 4, 4, 8] n = len(原创 2022-02-21 13:28:26 · 616 阅读 · 0 评论 -
异或问题总结
文章目录前言一、异或运算的性质1. 0^N == N , N ^ N == 02. 异或运算满足交换律和结合律二、练习题1.不用额外变量交换两个数2.一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数3.怎样把一个int类型的数,提取出最右侧的1来4.一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数5.输出二进制1的个数前言通常来讲,我们说异或问题就是:相同为0,不同为1左神说,我们可以将异或问题看为无进位相加举个例子:6^76 的二进原创 2022-02-21 23:21:43 · 2392 阅读 · 0 评论