算法和数据结构
文章平均质量分 55
数据结构和算法总结
炫橘子上火
玩笑人生
展开
-
计算机相关竞赛——适合个人的赛事
1. 程序设计国外:TopCoder Open, Google Code Jam, Facebook Hacker Cup。国内:阿里天池,百度之星,微软编程之美。2. 大数据Kaggle,阿里天池,百度飞桨。原创 2021-10-09 17:45:52 · 2244 阅读 · 0 评论 -
AcWing动态规划——线性DP、区间DP、计数类DP
AcWing动态规划——线性DP、区间DP线性DP:是指递推方程有明显的线性关系的,可能是一维线性也可能是二维的。题目:数字三角形:动态规划时间复杂度:状态数量 * 转移计算量代码:最长上升子序列:怎么把最大序列保存下来?最长公共子序列:状态计算的划分依据:以字符串a[i]和b[j]是否包含在子序列当中作为划分依据。编辑距离:区间DP:状态表示的时候一般表示的是某一个区间。石子合并:...原创 2021-06-27 07:38:41 · 391 阅读 · 0 评论 -
AcWing动态规划-背包问题
动态规划-AcWing背包问题:容量为V的背包,N个物品(每个问题体积vi,权重wi),在背包能装得下的前提下,问总权值最大为多少?动态规划思考过程:01背包代码:原题链接:01背包问题初始版:优化版:完全背包:原题链接:完全背包问题初始版代码(复杂度较高):优化版代码:优化为2维:优化为1维:多重背包:原题链接:多重背包问题初始版:优化版:由上得知,无法使用完全背包的方法优化多重背包,使用二进制优化方法原创 2021-06-24 06:17:59 · 140 阅读 · 0 评论 -
链表
链表与数组1、大纲(1) Linked ListDummy NodeHigh Frequency(2) ArraySubarraySort Array原创 2021-05-08 23:04:08 · 99 阅读 · 0 评论 -
动态规划——补充
动态规划补充知识理解1. 动态规划题目特点2. 动态规划组成部分第一部分:确定状态确定状态时,可以从两方面考虑:1. 最后一步 2. 子问题第二部分:转移方程第三部分:初始条件和边界情况第四部分:计算顺序(一般从小到大)...原创 2021-05-06 22:30:26 · 82 阅读 · 0 评论 -
最小生成树和二分图
最小生成树和二分图一、最小生成树1. 朴素版Prim算法朴素版Prim算法和Dijkstra算法很相似。算法流程:(说明:S代表当前在连通块中的所有点)算法模版:【最小生成树——朴素版Prim算法】AcWing 858. Prim算法求最小生成树2. Kruskal算法算法模版:【最小生成树——Kruskal算法】AcWing 859. Kruskal算法求最小生成树二、二分图2. 染色法代码模版:【二分图——染色法】AcWing 860. 染色法判定二分图3. 匈牙利原创 2021-05-06 22:17:24 · 104 阅读 · 0 评论 -
排序
排序快速排序:【数组排序——快速排序】Leetcode 912. 排序数组归并排序:【数组排序——归并排序】Leetcode 912. 排序数组堆排序:【数组排序——堆排序】Leetcode 912. 排序数组原创 2021-04-16 20:56:31 · 83 阅读 · 0 评论 -
最短路
最短路问题原创 2021-04-16 20:48:53 · 224 阅读 · 0 评论 -
并查集
并查集并查集,简单来说,是一种用来解决集合查询和合并的数据结构。支持支持O(1)查询(find),和O(1)合并(union)。1. 并查集可以干什么判断两个值是否在同一集合(find 操作)将两个集合合并(union 操作)2. 并查集的时间复杂度上面说find和union是O(1)的,但准确来说是logn,注意这个和logn是不一样的,这logn大家可以查一下,它在n很大很大的时候,它仍然很小很小。所以我们才说是O(1)。3. 查询find和合并union的模板(C++)int Fi原创 2021-03-06 22:24:44 · 803 阅读 · 0 评论 -
动态规划
动态规划1、大纲小知识(按以下顺序写代码)初始条件(起始点,一眼就能看出来的点)边界条件(边界的情况单独计算)再写一般情况5种方法做一下那道题:1、迭代;2、分治;3、记忆化搜索;4、自底向上;5、自顶向下。...原创 2021-02-28 09:26:32 · 301 阅读 · 1 评论 -
深度优先搜索DFS
深度优先搜索DFS1、学习大纲:Recursion(递归)Combination(组合)Permutation(排列)Graph(图)Non-Recursion(非递归)2、什么时候使用DFS?碰到让你找所有方案的题,一定是DFS;90%DFS的题,要么是排列要么是组合。此外,如果面试官不特别要求的话,DFS都可以使用递归(Recursion)的方式来实现。(1)组合搜索问题问题模型:求出所有满足条件的“组合”判断条件:组合中的元素是顺序无关的。时间复杂度:与2^n相关。.原创 2021-02-12 22:15:20 · 122 阅读 · 2 评论 -
宽度优先搜索BFS
宽度优先搜索BFS1、学习大纲:二叉树上的宽搜图上的宽搜拓扑排序棋盘上的宽搜2、什么时候使用BFS?小问:如果题目问最短路径,除了BFS还可能是什么算法?如果问最长路径呢?答案:最常见的算法中,BFS还可以用DP;如果是最长路径的话,可以用DFS和DP。3、基础知识...原创 2021-01-28 20:16:28 · 242 阅读 · 0 评论 -
二叉树与分治法
二叉树与分治算法1、二叉树深度:O(log(n))~O(n)。2、是否使用递归要看递归的深度,太深容易出现Stackoverflow的问题。3、二叉树大部分情况下可能会考递归,当然也可能会出现考非递归的情况(迭代)。一、时间复杂度训练1、通过O(n)的时间,把n的问题变成两个n/2的问题,复杂度是多少?求解:方法一、先写T(n)的表达式:T(n) = 2T(n/2) + O(n) = 2T(2T(n/2) + O(n/2)) + O(n) = 4T(n/2) + 2O(n) = ... =原创 2021-01-03 08:35:56 · 1001 阅读 · 0 评论 -
二分法
1、时间复杂度分析T(n) = T(n/2) + O(1) = O(logn)二分法:用O(1)时间将规模为n的问题变为n/2规模的问题。原创 2020-11-22 08:01:02 · 574 阅读 · 0 评论