DnA
算法和数据结构
ykun089
这个作者很懒,什么都没留下…
展开
-
[DnA] 三维迷宫问题
题面:http://poj.org/problem?id=2251DescriptionYou are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, eas原创 2021-08-20 15:53:59 · 202 阅读 · 0 评论 -
[DnA] 最长公共子字符串
方案:def func(str1,str2): li = [] len1 = len(str1) for i in range(0,len1): for j in range(i,len1): li.append(str1[i:j+1]) maxlen = 0 maxstr = "" for ele in li: if str2.__contains__(ele): i原创 2021-08-19 17:12:58 · 80 阅读 · 0 评论 -
[数据结构] 简介各种树形数据结构
https://www.jianshu.com/p/912357993486原创 2020-06-26 11:35:52 · 354 阅读 · 0 评论 -
[DnA] 找零问题
贪心算法:Value = (10,5,2,1)def GreedyChange(target:int): ret = {} if target < Value[0]: return False for val in Value: shang,yushu = divmod(target,val) if yushu == 0: ret[str(val)] = shang pr原创 2021-08-12 11:40:41 · 50 阅读 · 0 评论 -
[DnA] 求最大不包含相同值的矩阵
题面:有一个n*m的矩阵,矩阵中每个元素都有一个整数值,在此矩阵中找到一系列子矩阵,使得此子矩阵内的元素都不一样,返回这一系列子矩阵中包含元素最多的矩阵,或者返回元素个数即可。思路:构成矩阵的思路有两种:1)左上角顶点,和右下角顶点; 2)左上角顶点,长 和 宽。本题中,使用第一种方法来确定子矩阵比较合适。因此可以从最左上角开始,依次获取所有子矩阵,再在子矩阵集合中查找符合条件的那个矩阵即可。...原创 2021-09-08 09:22:05 · 117 阅读 · 0 评论 -
[DnA] 算法时间复杂度排序
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^2logn) < O(n^3)只要在遍历中出现运行集合规模减半,那么时间复杂度里一定会出现 logn,比如二分查找法的时间复杂度就是 O(logn)logn 其实是 以2为底的对数的简写log以2为底的对数的函数曲线 在 斜率为1函数曲线的下方,因此y值永远小于斜率唯一的曲线。...原创 2021-08-09 14:30:38 · 300 阅读 · 0 评论 -
[DnA] dp问题(野营)
野营问题:matrix = []sublimits = 0limits = []values = []def makematrix(): global limits limits = [int(x) for x in input().strip().split()] global sublimits sublimits = [int(x) for x in input().strip().split()] global values value原创 2021-08-17 20:50:19 · 166 阅读 · 0 评论 -
[DnA] 汉诺塔问题
思路把n个盘子的问题简化成2个盘子的问题。当2个盘子和3个柱子时,问题很好解决,因此可以把所有盘子分成两块:顶部的n-1个盘子作为一个整体,第n个盘子作为一个整体,这就抽象成了2个盘子的模型。这样的话我们便可以使用递归的方法来反复模拟两个盘子的情况。实现# n : n个盘子# a,b,c : 柱子编号# 每次从 a b c 柱子的顶部移动一个盘子def hanoi(n,a,b,c): if(n>0): hanoi(n-1,a,c,b) .原创 2021-08-09 15:39:26 · 91 阅读 · 0 评论 -
[DnA] 排序算法
冒泡:def BubbleSort(li:[]): length = len(li) for i in range(0,length): for j in range(0,length - i - 1): if li[j] > li[j+1]: tmp = li[j] li[j] = li[j+1] li[j+1] = tmp原创 2021-08-12 17:22:56 · 152 阅读 · 0 评论 -
[c++] STL中的容器
前言:容器作为STL的重要组成部分,其主要包括两大类:顺序容器 和 关联容器 。虽说这二者都是用来存储数据的数据结构,但是他们的底层实现和特长有很大差别:顺序容器不能通过按值查找,包括附加在其上的迭代器和算法,如果想获得某个节点,必须遍历顺序容器。 顺序容器多由数组 和 链表构成,关联容器多由hash表和树构成。 由于顺序容器的底层是数组和链表,因此默认是无顺的,这里不要望文生义地认为顺序容器内部元素是顺序存储。 树形结构的关联容器,其数据在底层存储默认就是有序的,因此对其元素进行排序和查找要原创 2020-06-27 16:12:16 · 93 阅读 · 0 评论 -
[DnA] 单向链表
代码:class ListNode: def __init__(self,val): self.next = None self.val = valclass List: def __init__(self,li:[]): self.head = ListNode("null as head") self.tail = self.head for ele in li: self原创 2021-08-19 17:16:52 · 59 阅读 · 0 评论 -
[DnA] 斐波那契数列
斐波那契数列原创 2021-08-11 18:03:50 · 162 阅读 · 0 评论 -
[DnA] 快速排序
思路:快速排序采用的是递归和分而治之的思想代码:def qsort(li): # 如果列表是空,则啥都不干 if not li: return # 取中间位置mid及其值midvalue,或者随便取一个位置 length = len(li) mid = length//2 left = [] right = [] # 遍历列表,把所有小于此值的数放到左列表中,把大于此值的数放到右列表中 midva原创 2021-08-19 11:32:25 · 263 阅读 · 0 评论 -
[DnA] 一个数学学习网站
https://betterexplained.com/原创 2021-08-21 11:15:05 · 78 阅读 · 0 评论 -
[DnA] 递归函数技巧
递归函数的应用很广泛,特别是在解决树形数据结构的问题时。但是递归函数的编写和阅读也是比较烧脑的。有一个技巧可以帮助编写和阅读递归函数:把递归函数当做一个空语句,前面的代码会被集中地依次执行,后面的代码也会被集中地依次执行例子:def func(n): if n==0: return print("before"+str(n)) func(n-1) print("after"+str(n))func(10)输出:befo原创 2021-08-10 11:11:00 · 106 阅读 · 0 评论 -
[DnA] DNA序列问题
方案:str = input()target_len = int(input())g = 0rat = 0for i in range(0, len(str) - target_len + 1): GC = str.count('G', i, i + target_len) + str.count('C', i, i + target_len) if GC > g: g = GC rat = iprint(str[rat:rat + ta原创 2021-08-19 17:10:02 · 136 阅读 · 0 评论 -
[DnA] 满二叉树 和 完全二叉树
满二叉树:深度为k的树,如果节点总数为 2^k -1 ,则是满二叉树。注:这是100%精确的定义,网上很多定义都不准确。完全二叉树:去掉最后一层后,是满二叉树,最后一层的叶子节点是从左往右依次出现的。例子:a) 满二叉树,节点数满足 2^k -1。b) 完全二叉树,去掉最后一层,是一个满二叉树,又因为从左往右依次排列,所以是完全二叉树。c) 非满二叉树,因为节点数量不满足,不是完全二叉树,因为去掉最后一层不是满二叉树。d) 非满二叉树,因为节点数量...原创 2021-08-30 19:32:42 · 153 阅读 · 0 评论 -
[DnA] 从单向列表中删除指定字符串
题面:输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。链表的值不能重复。构造过程,例如输入一行数据为:6 21 23 25 14 57 22则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示:1 2 表示为2->1链表为2->13 2表示为2->3链表为2->3->15 1表示为...原创 2021-08-19 17:03:41 · 93 阅读 · 0 评论 -
[DnA] 二分查找和冒泡排序
代码:import numpy as npsettest = set(np.random.randint(0,100,20))def BubbleSort(li:[]): length = len(li) for i in range(0,length): for j in range(0,length - i - 1): if li[j] > li[j+1]: tmp = li[j]原创 2021-08-19 17:18:28 · 66 阅读 · 0 评论 -
[DnA] 单向链表
class ListNode: def __init__(self,val): self.next = None self.val = valclass List: def __init__(self,li:[]): self.head = ListNode("null as head") self.tail = self.head for ele in li: self.ta...原创 2021-08-13 17:49:51 · 51 阅读 · 0 评论 -
[DnA] dp问题(字符串编辑距离)
方案:matrix = []x = []y = []def dp(row,col): if row < 1 or col < 1: return -1 d = 0 for m in range(1,len(y)+1): for n in range(1,len(x)+1): #如果当前节点的 行元素 和 列元素 相等,则当前单元格的值为左上角的单元格的值 if x[n] ==原创 2021-08-18 18:27:33 · 142 阅读 · 0 评论 -
[DnA] BFS 和 DFS的伪代码
DFS:def DFS(node,value): if not node: return for ele in node.所有邻居: if ele.value == value: result.append(ele) else: DFS(ele,value)BFS:result = []def BFS(node,value): nextlist = node.所有邻居原创 2021-08-17 16:30:45 · 545 阅读 · 0 评论 -
[DnA] 一组数的所有和值组合(食谱搭配问题)
描述:给定一组数,计算所有组合的和值,比如 2个数的和值,3个数的和值,... ,N-1个数的和值代码:li = []#所有组合,格式为# {# “elenum_1”:{# "0":li[0],# "1":li[1],# ...# "n":li[n],# },# "elenum_2":{# “(0,1)”:li[0]+li[1],# “(0,2)”:li[0]+li[2],# .原创 2021-08-24 18:37:20 · 278 阅读 · 0 评论 -
[DnA] 查找算法
二分查找:def BiSearch(li:[],key): length = len(li) high = length - 1 low = 0 mid = (high + low)//2 while mid <= length and mid != 0: if key > li[mid]: low = mid elif key < li[mid]: high =原创 2021-08-12 17:23:35 · 88 阅读 · 0 评论 -
[DnA] 迷宫问题
col = 0row = 0matrix = []successpath = []tmppath = []def getinput(): # 获取行列参数 s_row,s_col = input().strip().split() global row global col row = int(s_row) col = int(s_col) # 根据输入构建矩阵 for line in range(row): ...原创 2021-08-19 15:43:27 · 67 阅读 · 0 评论 -
[DnA] 二分查找树
代码:class BiTreeNode: def __init__(self,val): self.val = val self.lchild = None self.rchild = None self.parent = Noneclass BST: def __init__(self,list): self.root = None if list: for原创 2021-08-19 17:15:40 · 53 阅读 · 0 评论