数据结构与算法(C/C++/Python)
此专栏记录C/C++/Python程序语言的基础知识点;整理总结数据结构和各种基础算法,以及上述语言的代码实现;还有刷leetcode时错题的总结和感悟
为秋招做准备,努力加油
马鹤宁
知到极处便是行,行到极处便是知
展开
-
数据结构之树家族介绍
树是一种非线性结构,是由n(n>=0)个结点组成的有限集合。节点的度:一个节点含有的子树的个数称为该节点的度 树的度:一颗树中,最大的节点的度称为树的度 树的深度:根节点层次为1,其他节点的层次是其父节点层次加1。一颗树中所有节点层次的最大值称为这棵树的深度。也就是树的层数 树的遍历:先序遍历:根左右;中序遍历:左根右;后序遍历:左右根二叉树是一种特殊的树,限制每个节点最多有两个...原创 2019-07-29 22:55:38 · 1568 阅读 · 0 评论 -
Ubuntu环境下将MTCNN的C++程序封装成.so动态库文件和.a静态库文件
近期正在做在Ubuntu环境下将C++程序封装成动态库文件和静态库文件,期间不知道掉了多少坑,在这里写下来以免忘记工作是将实现MTCNN的C++源代码封装成动态库文件和静态库文件,原先在github上找到了一个依据opencv和openblas库的C++源码,在没有配置opencv的环境下能够调用opencv相应的库,可是在没有openblas的环境下却不能调用openblas库文件,所以随放弃将...原创 2018-06-10 14:24:50 · 3710 阅读 · 6 评论 -
leetcode_11:链表
链表链表翻转反转一个单链表class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pre = NULL; ListNode* tmp = NULL; while(head){ tmp= head->next; ...原创 2020-03-17 21:22:41 · 129 阅读 · 0 评论 -
leetcode_10:并查集
并查集维基百科中的定义:在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个用于此数据结构的操作:Find: 确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集Union: 将两个子集合并成同一个集合为每个集合选定一个固定的元素,称为代表,以表示整个集合。并查集是树型结构...原创 2020-03-16 20:46:50 · 275 阅读 · 0 评论 -
leetcode_9:二叉树
树二叉树的层次遍历给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:[[3],[9,20],[15,7]]。思路: 二叉树有四种形态,单节点,只有左子树,或者只有右子树,或者左右子树都存在,所以需要把每一层的节点数目记录下来。数据结构选择队列,先进先出。/** * Defin...原创 2020-03-11 20:31:23 · 129 阅读 · 0 评论 -
leetcode-8:DFS和BFS
DFS和BFS节点间通路节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。提示:节点数量n在[0, 1e5]范围内。节点编号大于等于 0 小于 n。图中可能存在自环和平行边。思路: 判断两点之间是否连通,用DFS或者BFS,用栈实现DFS,用队列实现BFS。我不喜欢递归,递归要迭代,我脑子里建不起迭代的过程图。用栈实现DFS伪码:栈初始化,并让起始顶点入...原创 2020-03-10 18:18:44 · 246 阅读 · 0 评论 -
leetcode-7:回文串问题
回文串问题解释一下为什么会记录刷题过程。记得研一为了算法课刷题,曾经在本子中记录过思路和代码。这些算法思想,平常也没机会使用,长时间不用,忘得比较快,再加上本子不易保存和现在电子阅读的普及,所以就导致复习不好复习,还得从头再来,所以这次刷题就记录下来,发在csdn和知乎,以便随时观看。最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。思路:...原创 2020-03-09 13:28:29 · 474 阅读 · 0 评论 -
Leetcode_6:子序列问题
子序列问题最长连续递增序列给定一个未经排序的整数数组,找到最长且连续的的递增序列。思路: 要找一个最长且连续,关键是连续,那么只要遍历,发现不连续就归零,记录最大值即可。class Solution {public: int findLengthOfLCIS(vector<int>& nums) { int n = nums.size(); ...原创 2020-03-04 17:42:22 · 221 阅读 · 0 评论 -
利用快速傅里叶计算多项式相乘
FFT多项式计算傅里叶变换是一个很大的概念,里面包含太多太多东西,整篇在傅里叶变换中只是一个小应用而已。就我的理解,描述快速傅里叶变换优化多项式乘法的原理和具体实践。傅里叶变换傅里叶变换是一种线性积分变换,用于信号在时域(或空域)和频域之间的变换。一般情况下,若傅里叶变换一词不加任何限定语,则指的是连续傅里叶变换。(连续)傅里叶变换定义如下:傅里叶变换将可积函数f:R→Cf: \mathb...原创 2020-03-01 17:55:46 · 1350 阅读 · 0 评论 -
编辑距离
编辑距离是指两个子串之间,由一个转成另一个所需要的最少编辑操作次数。允许的编辑操作包括:将一个字符替换成另一个字符插入一个字符删除一个字符这是常见的求两个字符编辑距离的题目描述,被称为莱文斯坦距离,又称为Levenshtein距离,是俄罗斯科学家莱温斯坦在1965年提出来的概念。 – 来自于维基百科定义假设两个字符串分别为A,B,长度分别为n=∣A∣n=\left| A...原创 2020-02-21 16:27:32 · 175 阅读 · 0 评论 -
leetcode_5:回溯法
回溯法(backtracking)是暴力搜索法中的一种。对于某些计算问题而言,回溯法是一种可以找出所有(一部分)解的一般性算法,尤其适用于约束满足问题(在解决约束满足问题时,我们逐步构造更多的候选解,并且在确定某一部分候选解不可能补全成正确解之后放弃继续搜索这个部分候选解本身及其可以拓展出的子候选解,转而测试其他的部分候选解)–维基百科通俗点理解就是回溯法其实是一个搜索过程,按照条件搜索,当搜索...原创 2019-12-29 17:11:02 · 272 阅读 · 0 评论 -
leetcode_4:背包问题
0-1背包:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量且价值总和最大。思路:每件物品仅一件,可以选择放与不放。用dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值,其状态转移方程定义为:dp[i][v] = max(dp[i-1][v] + dp[i-1][v-c[i]]+w...原创 2019-12-17 18:13:52 · 778 阅读 · 0 评论 -
leetcode_3:二叉树
二叉树二叉树(Binary Tree)是每个节点最多只有两个分支的树结构,通常分支被称为“左子树”或“右子树”,二叉树的分支具有左右次序,不能随机颠倒。二叉搜索树(Binary Search Tree),也称为二叉查找树,是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的...原创 2019-12-15 16:52:06 · 142 阅读 · 0 评论 -
leetcode_2: 排序问题
378.有序矩阵中第K小的元素题目描述:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。示例:matrix = [[ 1, 5, 9],[10, 11, 13],[12, 13, 15]],k = 8, 返回 13。说明:你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2思...原创 2019-12-13 19:56:52 · 424 阅读 · 0 评论 -
leetcode_1: 最少移动次数问题
453:最小移动次数使数组元素相等题目描述:给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。示例:输入:[1,2,3]输出:3解释:只需要3次移动(注意每次移动只会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]思路:n-1个元素同...原创 2019-12-12 19:49:50 · 3718 阅读 · 0 评论