数据结构
文章平均质量分 67
ds
sdbhewfoqi
这个作者很懒,什么都没留下…
展开
-
【Leetcode】各结构的时间复杂度
二分法就是把一个数据规模为N的先分为N/2,然后再分为N/4,N/8,N/16…一直等分到N/y =1的时候就不分了,现在我们来考虑下,到底分多少次才能把规模为N的数据分到结果为1,这里假设为x次,这个x就是次数,也是我们用大O表示法表示的时间复杂度,我们只需要把x取到就可以了。二叉树的高度:二叉树的高度是从叶节点开始(其高度为1)自底向上逐层累加的。二叉树的深度:二叉树的深度是从根节点开始(其深度为1)自顶向下逐层累加的。因此二分法的时间复杂度就是O(logN)二叉树时间复杂度:O(n)原创 2023-11-09 17:39:13 · 586 阅读 · 0 评论 -
【数据结构】匈牙利算法
参考代码:力扣算法学习笔记(5):匈牙利算法 - Pecco的文章 - 知乎二分图匹配之匈牙利算法(超级详细,看完不懂都难)二分图最大匹配:匈牙利算法的python实现 - JamesPei - 博客园KM算法 · Issue #34 · nhjcacmt/acm · GitHub...原创 2021-11-19 18:28:00 · 166 阅读 · 0 评论 -
【leetcode总结】解析回溯法系列:)
一、排列问题46.全排列(middle)给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]https://leetcode-cn.com/problems/permutations/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-mfrp/这里和...原创 2021-08-22 22:41:53 · 391 阅读 · 0 评论 -
【leetcode总结】解析dp股票系列:)
121. 买卖股票的最佳时机(easy)122. 买卖股票的最佳时机 II(easy)309.最佳买卖股票时机含冷冻期(middle)714.买卖股票的最佳时机含手续费(middle)901.股票价格跨度(middle)fucking-algorithm/动态规划系列/团灭股票问题.mdleetcode 买卖股票合集 - 木吉子的文章 - 知乎leetcode股票买卖题目汇总...原创 2021-08-19 19:46:29 · 215 阅读 · 0 评论 -
【数据结构】DP题目汇总
一维dp53. 最大子序和(子序要求连续)状态定义:dp[i] 以第i个数结尾的「连续子数组的最大和」。(1个循环)状态方程:dp[i] = max(nums[i], dp[i-1]+nums[i])300. 最长递增子序列(子序列不要求连续)状态定义:dp[i]的值代表nums前i个数字的最长子序列长度。(2个循环)状态方程:dp[i] = max(dp[i], dp[j] + 1) for j in [0, i)https://leetcode-cn.com/pr...原创 2021-07-13 18:41:12 · 209 阅读 · 0 评论 -
【数据结构】动态规划DP总结
这个博主把这些题目归纳到简单基础dp里了,主要包括递推、背包、LIS(最长递增序列),LCS(最长公共子序列)。面向找工作编程,我也只会这几种就好了。背包(选or不选的问题)背包问题可以概括为这样的模型:有若干种选择,每种选择有一定的代价和价值,做某些选择会得到特定的状态,问我们在约定的条件下怎么得到特定的状态?这里的状态可以是代价和或者价值和或者由其他这两者组合而来的状态。这类问题需要枚举每种状态,但是可以通过动态规划减少枚举的次数,提高效率,主要思想是每次都利用前面得到的状态进行转移得到当前原创 2021-07-07 21:25:04 · 295 阅读 · 0 评论 -
【数据结构】前缀树/字典树
//插入一个新单词 public static void insert(TrieNode root,String str){ if(root==null||str.length()==0){ return; } char[] c=str.toCharArray(); for(int i=0; i<str.length(); i++){ //如果该分支不存在,创建一个新节点 if(root.nextNode[c[i]-'a']==null){ root....原创 2021-07-12 10:45:04 · 225 阅读 · 0 评论 -
【数据结构】01背包与完全背包
https://leetcode-cn.com/problems/coin-change/solution/yi-tao-kuang-jia-jie-jue-bei-bao-wen-ti-h0y40/背包问题具备的特征:是否可以根据一个 target(直接给出或间接求出),target 可以是数字也可以是字符串,再给定一个数组 arrs,问:能否使用 arrs 中的元素做各种排列组合得到 target。目录一、01 背包问题1.1 解法二、完全背包2.1 解法三、01背包例题原创 2021-06-30 08:36:03 · 664 阅读 · 0 评论 -
【数据结构】KMP算法
首先维护一个前缀表。前缀表求解过程如下:搜索这个词的所有前缀表prefix tableababc的prefix table: a ab aba abab ababc以abab为例,最长前缀和最长后缀相等时,为ab。长度是2。最后得到的前缀表为开始模拟kmp匹配过程继续寻找极端的例子维护前缀表,如下模拟开始,第一次,向右移动一个,从比较失败的地方开始匹配。...原创 2021-06-21 23:10:14 · 76 阅读 · 0 评论 -
【数据结构】关于双指针区间 循环不变量定义
参考:https://leetcode-cn.com/problems/sort-colors/solution/kuai-su-pai-xu-partition-guo-cheng-she-ji-xun-huan/原创 2021-06-17 22:43:02 · 365 阅读 · 1 评论 -
【数据结构】双指针
这类问题一般包括1、字符串匹配问题2、子数组问题原创 2021-06-03 23:26:17 · 143 阅读 · 1 评论 -
【数据结构】前缀和
求累计和数组sums。举例:a = [1, 2, 3, 4, 5]sums[0] = 1sums[1] = 3sums[2] = 6sums[3] = 10sums[4] = 15# 求idx=1-3的前缀和sums[3]-sums[0] = 10-1 = 9# 求idx=0-2的前缀和sums[2]-sums[-1] = 6-0 = 0默认sums[-1] = 0 # index=-1的前缀和为0...原创 2021-06-03 18:02:57 · 130 阅读 · 0 评论 -
【leetcode总结】解析链表系列
【数据结构与算法】面试之链表问题集锦(下)附上别人已经总结好的:小小搬运工——链表删除链表中的节点 203,237 删除链表的倒数第N个节点 反转链表 206 合并两个有序链表 回文链表 234 环形链表作为渣渣,之前看的数据结构视频课,所讲的删除链表元素,处于链表尾部的元素无法删除。删除9,但是最后一位还是存在。(maybe 237)(⊙o⊙)…整个代...原创 2018-11-26 18:32:52 · 338 阅读 · 0 评论 -
【Python】networkx设置图信息(2)
官网:https://networkx.org/documentation/stable/reference/generators.html使用自己的数据去手动创建自己的图形,而不是使用生成器,现从给graph添加点和边入手,手动创建graph。还是接着上一篇的教程,教程的3、4、5部分。start!!!目录1、给graph增加节点2、给graph增加边3、设置graph的信息3.1、创建graph时添加属性(图属性)3.2、指定节点的属性(节点属性)3.3、指定边的属性原创 2020-11-22 19:20:55 · 1501 阅读 · 2 评论 -
【Python】networkx创建图(1)
创建一个无向图import matplotlibimport networkx as nxfrom PIL import Imageimport matplotlib.pyplot as pltfrom networkx.drawing.nx_pydot import to_pydotfrom matplotlib.font_manager import *#用于显示图片def ShowGraph(G): # 使用pydot保存图片 P = to_pydot(G)原创 2020-11-22 17:54:34 · 3057 阅读 · 1 评论 -
【数据结构】二分查找
二分查找(要已经排好序!!!)定义:二分查找又称折半查找,它是一种效率较高的查找方法。二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。二分查找只适用顺序存储结构。# 要求序列有序def binary_search(alsit,item): """二分查找,递归""" n = len(alsit)...原创 2019-03-01 00:02:48 · 1028 阅读 · 0 评论 -
【数据结构】单调队列/栈
深度优先是用栈,先进后出;(二叉树的深度优先遍历就是先序遍历)广度优先是用堆,先进先出。深度优先搜索二叉树是先访问根结点,然后遍历左子树接着是遍历右子树,因此我们可以利用栈的先进后出的特点,先将右子树压栈,再将左子树压栈,这样左子树就位于栈顶,可以保证结点的左子树先与右子树被遍历。代码:# 深度优先遍历def dfs(self,root): stack = ...原创 2019-03-09 12:09:35 · 412 阅读 · 1 评论 -
【数据结构】排序
排序排序总结去这里看:八大排序算法记忆总结(摘自我的考研复习笔记啊,率辉??):(快)快速排序、(些)希尔排序、(归)归并排序、(队)堆排序时间复杂度:快些以nlogn的速度归队!! 空间复杂度:记特殊的就好,快排logn,归并n,其他都是1 稳定性总结:心情不稳定,快些选一堆好友来聊天!!与排序原理有关的细节经过一趟排序,能够保证一个元素到达最终位置,这样...原创 2019-02-28 10:44:08 · 1846 阅读 · 1 评论 -
【数据结构】二叉树
二叉树6种遍历方式前中后遍历递归代码里有self是因为def函数在class Tree(object)类里。不在类里,就不用self啦leetcode 94 二叉树的中序遍历 递归class Solution(object): # 递归 def inorderTraversal_recursive(self, root): """ ...原创 2019-03-07 14:02:06 · 278 阅读 · 0 评论 -
【数据结构】BFS
图判断以邻接表方式存储的有向图中是否存在由顶点Vi到Vj的路径。算法思想:判断图中从Vi到Vj是否有路径,可以采取遍历的方法。遍历的起点为Vi,在一次BFS退出之前遇到Vj,则证明有路径,否则没有路径。在有向图G中,如果结点r到G中的每个结点都有路径可达,则称结点r为G的根节点。编写一个算法判断有向图G是否有根,若有,则打印出所有根节点的值。算法思想:判断顶点r到G中的每个顶点是否有路...原创 2018-09-14 19:01:45 · 651 阅读 · 0 评论 -
【数据结构】DFS
广度优先BFS是队列,一般求最短距离用广搜。 深度优先DFS是栈,一般求能不能到达用深搜。以下来源:python中的 DFS 与 BFSDepth-First和Breath-First搜索来实现下面强调的目标: 查找所有的连接到目标顶点的组件中的全部顶点 返回两个顶点之间的所有可行的路径 在BFS的情况下,返回最短路径(长度为路径边的数目) D...原创 2019-03-28 19:36:19 · 931 阅读 · 0 评论 -
【Python】优先队列和双端队列
优先队列元素加入优先队列时,队列里不一定是排序的,但是get弹出元素时,一定是弹的当前队列里最小的元素。from queue import PriorityQueue # 优先队列# 创建优先队列pQ = PriorityQueue() #pQ.put(3)pQ.put(100)pQ.put(78)print(pQ)# <queue.PriorityQueue ob...原创 2019-07-12 23:01:55 · 660 阅读 · 0 评论 -
【Python】堆和优先队列的使用
优先队列的例子,源自23. 合并K个排序链表(我的解答)python里面的堆是通过在列表中维护堆的性质实现的。python堆的部分API,其他API查阅文档python_heap_API和heapq的源代码import heapq#向堆中插入元素,heapq会维护列表heap中的元素保持堆的性质heapq.heappush(heap, item)#heapq把列表x转换成堆...原创 2019-03-25 13:34:15 · 772 阅读 · 0 评论 -
【数据结构】背包九讲
1. 01背包二维数组+动规状态转移方程:定义f[i][j]: 前i个物品,背包容量j下的最优解1)当前背包容量不够,为前i-1个物品最优解:j<w[i]: f[i][j] = f[i-1][j]2)当前背包容量够,判断选与不选第i个物品选:f[i][j] = f[i-1][j-w[i]] + v[i]不选:f[i][j] = f[i-1][j]#include&...原创 2019-08-04 21:12:29 · 420 阅读 · 0 评论 -
【剑值offer】位运算相关
复习一下位运算位运算小结(按位与、按位或、按位异或、取反、左移、右移)位运算不管是在Java语言,还是在C语言中,或者其他语言,都是经常会用到的,所以本文也就不固定以某种语言来举例子了,原始点就从0、1开始。位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、右移(>>)这几种,其中除了取反(~)以外,其他的都是二目运算符,即...原创 2019-07-23 12:12:07 · 154 阅读 · 0 评论 -
【数据结构】哈希表
在python中就是字典。常见题目有:经典的two sumBloom FilterBloom Filter跟单哈希函数Bit-Map不同之处在于:Bloom Filter使用了k个哈希函数,每个字符串跟k个bit对应。从而降低了冲突的概率。Bloom Filter的缺点bloom filter之所以能做到在时间和空间上的效率比较高,是因为牺牲了判断的准确率、删除的便...原创 2019-08-13 17:59:03 · 150 阅读 · 0 评论 -
【概率论】蓄水池算法(等概率抽取)
//stream代表数据流//reservoir代表返回长度为k的池塘 //从stream中取前k个放入reservoir;for ( int i = 1; i < k; i++) reservoir[i] = stream[i];for (i = k; stream != null; i++) { p = random(0, i); if (p &l...原创 2019-08-12 16:20:25 · 897 阅读 · 0 评论