
数据结构
一只小白在路上
吾生也有涯,而知也无涯,
展开
-
矩阵中的路径
def exist(self, board: List[List[str]], word: str) -> bool: def dfs(i,j,visited,k,board,word): if not 0<=i <len(board)or not(0<=j <len(board[0])) or board[i][j] != word[k] or visited[i][j]: return Fals...原创 2020-10-18 22:45:59 · 144 阅读 · 0 评论 -
旋转数组,二分查找
def find_min(num): left = 0 right = len(num)-1 while left < right: mid = (left+right)//2 if num[mid]>num[left]: left = mid +1 elif num[mid] < num[right]: right = mid else: right-=1 return num[left]num = [3,4,5,1,2]print(find原创 2020-10-18 20:23:16 · 140 阅读 · 0 评论 -
对成千上万数据进行排序,数据在某一个范围
if __name__ == '__main__': ages = input().split(" ") ageslist = [int(age) for age in ages] count = [0 for num in range(100)] for i in range(100): count[i] = ageslist.count(i) print(count) index = 0 for i in range(100):原创 2020-10-17 16:17:49 · 262 阅读 · 0 评论 -
合并两个有序的列表
list1 = [1,2,4,9,10]list2 = [2,5,8,10,11]def merge(list1,list2): res = [] # while list1 and list2: while list1 and list2: if list1[0]<list2[0]: res.append(list1[0]) del list1[0] else: res.append(list2[0]) del list2[0] if list1 :原创 2020-10-16 21:54:42 · 417 阅读 · 0 评论 -
排序
num = [45,34,78,12,34,32,29,64]def insertsort(num): for i in range(1,len(num)): temp = num[i] j = i-1 while j>=0 and num[j]>temp: num[j+1] = num[j] num[j] = temp j-=1 return numpr原创 2020-10-16 09:23:31 · 144 阅读 · 0 评论 -
重叠次数
解决思路:1.求两个列表的交集2.遍历交集列表中的每一个元素,min(元素在列表1中的次数,元素在列表2次数),就是此元素的重叠次数3.返回元素,最大重叠次数def max_overlap(list1,list2): overlap = set(list1).intersection(list2) ox = [(x,min(list1.count(x),list2.count(x))) for x in overlap] return max(ox,key=lambda x原创 2020-10-15 10:40:04 · 267 阅读 · 0 评论 -
二叉搜索树
二叉搜索树,又称二叉排序树、二叉查找树或是空树,或是非空二叉树class BstNode():# 二叉排序树的结点结构 def __init__(self,data,rchild= None,lchild =None ): self.data = data self.rchild = rchild self.lchild = lchildclass DicBinTree():# 创建一个二叉排序树类 def __init__(self原创 2020-10-11 17:36:22 · 108 阅读 · 0 评论 -
DFS
graph = { "A":["B","C"], "B":["A","C","D"], "C":["A","B","D","E"], "D":["B","C","E","F"], "E":["C","D"], "F":["D"],}def DFS(graph,s): stack = [] stack.append(s) seen = set() # 集合 seen.add(s) while (len(stack)&g原创 2020-09-26 10:42:05 · 68 阅读 · 0 评论 -
BFS算法
BFSgraph = { "A":["B","C"], "B":["A","C","D"], "C":["A","B","D","E"], "D":["B","C","E","F"], "E":["C","D"], "F":["D"],}def BFS(graph,s): queue = [] queue.append(s) seen = set() # 集合 seen.add(s) while (len(queu原创 2020-09-26 10:41:18 · 273 阅读 · 0 评论 -
四边形面积
n = int(input("请输入一个整数"))a = input().split(" ")length = [int(a[i]) for i in range(n)]dict1 = {}for i in range(n): dict1[length[i]] = length .count(length[i])a=sorted(dict1.items(),key=lambda item:item[0],reverse= True)print(a)tem=[]for j in原创 2020-09-26 10:39:20 · 269 阅读 · 0 评论 -
无重复字符子串
无重复字符子串def substring(s): # 哈希集合,记录每个字符是否出现过 occ = set() n = len(s) # 右指针,初始值为-1,相当于字符串的左边界的左侧,还没开始移动 rk ,ans = -1,0 for i in range(n): if i !=0: # 左指针向右移动一格,移除前一个字符 occ.remove(s[i-1]) while r原创 2020-09-26 10:36:37 · 382 阅读 · 0 评论 -
双指针
class Solution: def removeDuplicates(self, nums: List[int]) -> int: left = 0 right = 1 for i in range(len(nums)): if nums[left] == nums[right]: right +=1 else: left +=1原创 2020-09-24 18:08:29 · 74 阅读 · 0 评论 -
反转链表
class Node(): def __init__(self,data): self.data = data self.next = Noneclass List(): def __init__(self): self._head = None # 尾插法插入元素 def append(self, data): # 在单链表后插入元素,需要一个指针遍历到最后一个结点 p = sel原创 2020-09-23 18:27:09 · 80 阅读 · 0 评论 -
字符串匹配
class Solution: def isValid(self, s: str) -> bool: if len(s) % 2 == 1: return False pairs = { ")": "(", "]": "[", "}": "{", } stack = list() # 建立一个顺序栈 for ch in原创 2020-09-23 12:02:52 · 92 阅读 · 0 评论 -
算法day3
class Solution: def climbStairs(self, n: int) -> int: dp = [0 for _ in range(n+1)] dp[1] = 1 # 到第一台阶有多少种方法 dp[2] = 2 # 到第二台阶有多少种方法 for i in range(3,n+1): dp[i] = dp[i-1] + dp[i-2] # 到第i个状态的方法数量原创 2020-09-22 19:03:24 · 71 阅读 · 0 评论 -
算法day3
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例输入: 123输出: 321输入: -123输出: -321输入: 120输出: 21class Solution: def reverse(self, x: int) -> int: str_x = str(x) if str_x[0] == "-": x = int(" - " + str_x[1:][::-1]) else:原创 2020-09-21 16:51:17 · 73 阅读 · 0 评论 -
循环列表
# 实现一个顺序循环队列class LOOP_Queue(): def __init__(self,Maxsize=6): # M是分配空间的大小 self.queue = [None]*6 self.Maxsize = Maxsize self.front = 0 self.rear = 0 def enqueque(self,data):#入队 if (self.rear + 1)% self.Maxsi原创 2020-09-20 17:09:07 · 644 阅读 · 0 评论 -
链栈
# 使用顺序栈实现十进制转换成其他进制操作class Node(): # 结点类 def __init__(self,data): self.data = data self.next = Noneclass ListStack(): def __init__(self):# 初始化空栈 self._top = None def is_empty(self): if self._top == None:原创 2020-09-20 16:31:55 · 94 阅读 · 0 评论 -
顺序栈实现进制转换
# 使用顺序栈实现十进制转换成其他进制操作class sstack(): def __init__(self): # 初始化一个空栈 self.slist= [] def is_empty(self):# 判断栈是否为空 if self.slist == []: return 1 else: return 0 def pushstack(self,data): # 入栈原创 2020-09-20 15:57:42 · 1546 阅读 · 0 评论 -
链队列
原创 2020-09-20 11:17:16 · 90 阅读 · 0 评论 -
循环队列
原创 2020-09-20 10:49:14 · 171 阅读 · 0 评论 -
栈的应用
原创 2020-09-20 10:07:31 · 76 阅读 · 0 评论 -
顺序栈和链栈的基本操作
原创 2020-09-20 09:47:19 · 223 阅读 · 0 评论 -
栈的定义和特点
原创 2020-09-20 09:25:44 · 1480 阅读 · 0 评论 -
栈和队列的特点
原创 2020-09-20 09:16:39 · 1886 阅读 · 0 评论 -
单链表
# head->10->20->30->40# 创建结点class Node(): #结点类 def __init__(self,data): self.data=data self.next = None# 创建单链表class Singlelinklist(): def __init__(self): self._head = None def is_empty(self): if原创 2020-09-19 21:25:55 · 96 阅读 · 0 评论 -
# 用列表实现顺序表的基本操做
# 用列表实现顺序表的基本操做class seqlist(): def __init__(self,max_space=30): self.max_space = max_space #max_space最大分配空间 self.sl = max_space*[0] # 申请一个列表 self.length = 0 # 记录实际元素的个数 def appenddata(self,data):#追加元素data if self.原创 2020-09-19 16:46:05 · 202 阅读 · 0 评论 -
链表合并
不改变原列表原创 2020-09-19 14:20:27 · 95 阅读 · 0 评论 -
顺序表合并
def merge(l1,l2,l3): i = 0 j = 0 while i<len(l1) and j<len(l2): if l1[i] <= l2[j]: l3.append(l1[i]) i+=1 else: l3.append(l2[j]) j+=1 if i>=len(l1): l3.ext..原创 2020-09-19 13:58:17 · 305 阅读 · 0 评论 -
线性结构链表
原创 2020-09-19 09:21:23 · 180 阅读 · 1 评论 -
线性结构顺序表
保证了物理上的相邻关系,体现逻辑上的前驱后继关系原创 2020-09-19 08:26:02 · 207 阅读 · 0 评论