![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 77
薛定谔的智能
这个作者很懒,什么都没留下…
展开
-
leetcode双指针(python与c++)
1.字符串的排列思路:双指针+滑动窗口python:class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: dict_={} for i in s1: dict_[i] = dict_.get(i,0)+1 # # print('==dict_:',dict_) left,right =0,0 le原创 2021-11-27 20:59:14 · 289 阅读 · 0 评论 -
leetcode BFS(python+c++)
1.最小基因变化思路:bfs搜索python:class Solution: def minMutation(self, start: str, end: str, bank: List[str]) -> int: library = ['A','C', 'G','T'] queue = [start] num = 0 vis = set() while queue: s.原创 2021-11-18 23:49:17 · 997 阅读 · 0 评论 -
leetcode哈希表(python与c++)
1.整数转罗马数字python:class Solution: def intToRoman(self, num: int) -> str: dict_ = {1000:'M', 900:'CM', 500:'D', 400:'CD', 100:'C', 90:'XC', 50:'L', 40:'XL', 10:'X', 9:'IX', 5:'V', 4:'IV', 1:'I'} res = '' for key in dict_:原创 2021-09-23 23:49:01 · 288 阅读 · 0 评论 -
leetcode动态规划(python与c++)
1 .斐波那契数class Solution: def fib(self, n: int) -> int: # if n==0: # return 0 # elif n==1: # return 1 # else: # return self.fib(n-1)+self.fib(n-2) a =0 b =1 ...原创 2021-08-30 23:23:27 · 356 阅读 · 0 评论 -
leetcode hot100(第二部分) + python(c++)
50-1. 乘积最大子数组思路1:找到状态转移方程:maxf[i]:表示在i处最大连乘数minf[i]:表示在i处最小连乘数maxf[i] = max(nums[i],nums[i]*minf[i-1],nums[i]*maxf[i-1])minf[i] = min(nums[i],nums[i]*minf[i-1],nums[i]*maxf[i-1])#maxf[i]:表示在i处最大连乘数#minf[i]:表示在i处最小连乘数#maxf[i] = max(nums[i],num原创 2021-04-14 09:53:58 · 445 阅读 · 0 评论 -
leetcode hot100(第一部分) + python(c++)
1-1.两数之和思路1:两层for循环 O(n2)class Solution: def twoSum(self, nums, target): res = [] for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i]+nums[j]==target: res.extend(原创 2021-03-15 09:38:44 · 621 阅读 · 2 评论 -
二叉树的一些leetcode题目+python(c++)
二叉树考点主要有:1.三种遍历方式;2.求深度3.判断平衡性1-1.前序遍历思路1:递归法# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def helper(s.原创 2021-02-21 10:36:06 · 304 阅读 · 0 评论 -
链表的一些leetcode题目+python(c++)
主要常见下面几个知识点:1-1.请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteNode(self, node): .原创 2021-02-20 19:01:13 · 386 阅读 · 0 评论 -
python(c++)刷题+剑指offer
53-1. 在排序数组中查找数字 I思路1:hashclass Solution: def search(self, nums, target): dict_={} for i in range(len(nums)): dict_[nums[i]] = dict_.get(nums[i],0)+1 print(dict_) return dict_[target] if target in dict原创 2021-02-16 12:09:12 · 1078 阅读 · 2 评论 -
python刷题+leetcode(第三部分)
200.最大正方形思路:与岛屿,水塘不同的是这个相对要规则得多,而不是求连通域,所以动态规划构造出状态转移方程即可动态规划 if 0, dp[i][j] =0if 1, dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1class Solution: def maximalSquare(self, matrix): print('==np.array(matrix):\n', np.array(matri原创 2021-01-23 15:32:16 · 2241 阅读 · 4 评论 -
并查集
特点:用集合中的一个元素代表一个集合,就像帮主代替帮派,主要分为三步,初始化,查询,合并。用途:用来分离无环图,找到公共祖先等等。class AndCheckSet: def __init__(self, n=5):#初始化 self.fa = [0]*n for i in range(n): self.fa[i] = i def find(self, x):#查询 if (self.fa[x] == x)原创 2021-01-13 10:46:18 · 102 阅读 · 0 评论 -
python刷题+leetcode(第二部分)
一百零一.合并二叉树思路:采用前序遍历访问二叉树,如果节点其一为none,就返回另一个1.递归法# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def mergeTrees(s原创 2020-12-07 10:58:20 · 2888 阅读 · 0 评论 -
图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)
一.基础知识 有向图 无向图二.Dijkstra算法Dijkstra算法用于解决单源最短路问题,所谓单源最短路就是指定一个起点,求出这个起点到其它所有点的最短路。示例:求M到各个顶点的最短路径先构建邻接矩阵Adjacent, 初始状态dist[1~n] = inf, dist[M]=0,顶点更新状态vst[1~n] = 0以点M为起点:dist[M] = 0 vst[M] = 0dist[W] = inf vst[W] = 0d...原创 2020-07-24 11:17:32 · 743 阅读 · 0 评论 -
广度优先搜索(BFS)与深度优先搜索(DFS)
一.广度优先搜索(BFS)其是一层一层来,结果不唯一二.深度优先搜索(DFS)其是一条路走到黑,结果不唯一原创 2019-11-11 21:55:29 · 329 阅读 · 0 评论 -
python刷题+leetcode(第一部分)
一,题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution: def find(self,number,matrix): rows=len(matrix)#行数 cols=len(matrix[0]...原创 2018-08-03 17:14:27 · 2197 阅读 · 1 评论 -
递归理解以及时间复杂度计算
假如这里有 n 个台阶,每次你可以跨 1 个台阶或者 2 个t台阶,请问n个台阶有多少种走法?第一步走了一个台阶或第一步走了两个台阶,到下一个台阶也是类似,故这是一个递归。n个台阶就是,走了一个台阶后加剩下n-1台阶的走法,走了两个台阶后剩下n-2台阶的走法,f(n)=f(n-1)+f(n-2)终止条件:只剩一个台阶一种走法,只剩两个台阶两种走法,f(1)=1,f(2)=2...原创 2020-05-17 09:57:27 · 9185 阅读 · 0 评论 -
算法笔试题
一,搜索连通域M, N = list(map(int, input().split(',')))print(M,N)book = []for i in range(M): line = list(map(int, input().split(','))) book.append(line)print(book)# M=N=3# book=[[1, 0, ...原创 2018-10-25 10:54:49 · 241 阅读 · 0 评论 -
贪心算法+回溯算法+动态规划
一.贪心算法1.分糖果问题m个糖果,n个小孩,其中m<n,故需要每次找出对糖果需求最小的孩子分配糖,这样满足的孩子个数才最多。2.钱币找零问题用最少的纸币来支付同等的金钱。class Solution: def coinChange_2(self, coins, amount): coins=sorted(coins,reverse=True)...原创 2018-10-29 11:20:43 · 1671 阅读 · 0 评论 -
二分法查找+树
一,查找存在的一个数,该数在列表中唯一二分法查找是针对有序数据的查找方法,时间复杂度是O(logn)。。其中 n/2k=1 时,k 的值就是总共缩小的次数。而每一次缩小操作只涉及两个数据的大小比较,所以,经过了 k 次区间缩小操作,时间复杂度就是 O(k)。通过 n/2k=1,我们可以求得 k=log2n,所以时间复杂度就是O(K),也就是O(logn)。方法一,循环实际上,...原创 2018-10-24 14:29:50 · 511 阅读 · 0 评论 -
二叉树的基础知识
一,树E为根节点,BCD互称为兄弟节点,G、H、I、J、K、L互称为叶子节点(没有子节点)树的高度,深度,层数.高度从下往上数(0开始),深度从上往下数(0开始).二,二叉树2为满二叉树,叶子节点全部在最底层,除了它之外其余都有左右子节点.3为完全二叉树,叶子节点在最后两层,最后一层的叶子节点靠左排列.除了最后一层,其他层的节点个数达到最大.三,存储二叉...原创 2019-05-09 09:48:56 · 319 阅读 · 1 评论 -
数组与链表
一.数组1.python实现数组的增删查改class Array: def __init__(self, data): self.__data = data def find(self, index): """ index of data :param index: :return: ...原创 2019-08-03 22:20:21 · 121 阅读 · 0 评论 -
python实现Trie 树+朴素匹配字符串+RK算法匹配字符串+kmp算法匹配字符串
一.trie树应用:常用于搜索提示,如当输入一个网址,可以自动搜索出可能的选择。当没有完全匹配的搜索结果,可以返回前缀最相似的可能。例如三个单词app, apple, add,我们按照以下规则创建了一颗Trie树.对于从树的根结点走到黑色结点的路径上的字母依次组合起来就是一个完整的单词.class Trie: # word_end = -1 def __init__...原创 2019-08-14 18:17:29 · 1626 阅读 · 0 评论 -
排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)
https://www.cnblogs.com/wujingqiao/p/8961890.html#7- **时间复杂度**:对排序数据的总的操作次数。反应当n变化时,操作次数呈现什么规律- **空间复杂度**:算法在计算机内执行时所需要的存储空间的容量,它也是数据规模n的函数。一,冒泡排序:**复杂度分析:**- 时间复杂度:若给定的数组刚好是排好序的数组,采用改进后的冒泡...原创 2018-07-29 14:49:41 · 594 阅读 · 0 评论