Data Structures & Algrithm
默一鸣
韬光养晦
展开
-
数据结构-红黑树
红黑树[编辑]红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高原创 2016-09-23 15:14:02 · 904 阅读 · 0 评论 -
背包问题总结
前面是转载来的背包9讲,非常详细,后面有几个lintcode上的题目前言本篇文章是我(dd_engi)正在进行中的一个雄心勃勃的写作计划的一部分,这个计划的内容是写作一份较为完善的NOIP难度的动态规划总结,名为《解动态规划题的基本思考方式》。现在你看到的是这个写作计划最先发布的一部分。背包问题是一个经典的动态规划模型。它既简单形象容易理解,又在某种程度上能够揭示动态规划的本质,故不少...原创 2018-09-12 02:27:25 · 19792 阅读 · 0 评论 -
图的遍历中的树边,前向边,后向边,横叉边
树边,前向边,后向边,横叉边,应该说,不是一个图本身有的概念,应该是图进行DFS时才有的概念。图进行DFS会得到一棵DFS树(森林),在这个树上 才有了这些概念。对图进行DFS,可以从任意的顶点开始,遍历的方式也是多样的在图的遍历中,往往设置了一个标记数组vis的bool值来记录顶点是否被访问过。但有些时候需要改变vis值的意义。令vis具有3种值并表示3种不同含义vis = 0,表示该顶...原创 2018-08-16 01:37:17 · 3198 阅读 · 0 评论 -
判断图是否有环
总结一下判断图是否有环的所有方法,先只给出描述,后面有时间之后给出代码实现。一、无向图方法1、 我们知道对于环1-2-3-4-1,每个节点的度都是2,基于此我们有如下算法(这是类似于有向图的拓扑排序):求出图中所有顶点的度, 删除图中所有度<=1的顶点以及与该顶点相关的边,把与这些边相关的顶点的度减一 如果还有度<=1的顶点重复步骤2 最后如果还存在未被删除的顶点...原创 2018-08-16 01:03:33 · 12739 阅读 · 0 评论 -
欧拉图和哈密顿图
欧拉图及欧拉路径欧拉图 如果图G上有一条经过所有顶点、所有边的闭路径(边不重复,顶点可以重复)充分必要条件 无向图:G连通,所有顶点的度都是偶数有向图:G弱连通,每个顶点出度与入度相等欧拉路径 如果图G上有一条经过所有顶点、所有边的路径(边不重复,顶点可以重复)充分必要条件 无向图:G连通,恰有两个顶点的度是奇数有向图:G连通,恰有两个顶点的出度与入度不相等,其中一个出度比入度多原创 2018-04-19 14:34:33 · 3916 阅读 · 0 评论 -
NP问题
迄今为止,我们所研究的所有算法几乎都是多项式时间的算法:对于规模为n的输入,在最坏情况下的运行时间是O(n^k),其中k为某一确定的常数。如果一个判定问题的复杂度是该问题的一个实例的规模n的多项式函数,则这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题集合。通俗地称所有复杂度为多项式时间的问题为易解问题的问题类,否则为难解问题。关于多项式时间。什么是多项...原创 2018-04-19 14:03:49 · 12425 阅读 · 1 评论 -
Best Time to Buy and Sell Stock I / II / III / IV / with cooldown / with Transaction Fee买卖股票6题
121.Best Time to Buy and Sell Stock I题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。 如果只允许进行一次交易,也就是说只允许买一支股票并卖掉,求最大的收益。分析:动态规划法。从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求。复...原创 2018-01-31 02:19:26 · 2230 阅读 · 1 评论 -
Calculate Maximum Value II
http://www.lintcode.com/en/problem/calculate-maximum-value-ii/标签是动态规划我的思路是分治+记忆化搜索。只有分治就能解决问题,但是超时了,用了记忆化搜索通过。思路:题目是延续了http://www.lintcode.com/en/problem/calculate-maximum-value的,这里称为上一题,上一题原创 2018-02-04 01:05:51 · 528 阅读 · 0 评论 -
【算法题】minimum-adjustment-cost
题目描述:Given an integer array, adjust each integers so that the difference of every adjacent integers are not greater than a given number target.If the array before adjustment is A, the array原创 2017-12-06 21:55:55 · 430 阅读 · 0 评论 -
【算法题】word-break-ii
此题是word-break的follow up,word-break用中规中矩的dp算法即可解决。这个需要打印所有解决方案。我用dp + dfs, leetcode和lintcode都可以通过。时间复杂度:O(n方) 空间复杂度:O(n方)题目:Given a non-empty string s and a dictionary wordDict原创 2017-11-15 16:21:22 · 511 阅读 · 0 评论 -
二叉排序树
“二叉排序树,又称为二叉查找树。它或者是一颗空树,或者具有下列性质的二叉树。若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别为二叉排序树。构造一颗二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除关键字的速度。不管怎么说,在一个有序数据集原创 2017-10-10 20:05:24 · 710 阅读 · 0 评论 -
STL中的栈和队列
STL 中优先队列的使用方法(priority_queu)基本操作:empty() 如果队列为空返回真pop() 删除对顶元素push() 加入一个元素size() 返回优先队列中拥有的元素个数top() 返回优先队列对顶元素在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。使用方法:头文件:原创 2017-01-30 20:41:09 · 712 阅读 · 0 评论 -
二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要的原创 2017-01-30 16:37:49 · 12822 阅读 · 9 评论 -
vector遍历方法,c11果然好用
随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化。 vector是经常要使用到的std组件,对于vector的遍历,本文罗列了若干种写法。 (注:本文中代码为C++11的代码,需要在较新的编译器中编译运行) 假设有这样的一个vector: vector valList = { 0, 1, 2, 3, 4, 5, 6,原创 2016-11-02 19:56:23 · 4176 阅读 · 0 评论 -
C++_STL_数据结构_stack_栈
栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就原创 2016-11-08 20:35:43 · 2477 阅读 · 0 评论 -
最长增长子序列(串),最大公共子序列(串),
300. Longest Increasing Subsequence子序列,不需要连续的。思路一:传统的dp,dp[i]表示前i个数且以第i个数字结尾的最长增长子序列,遍历数组,dp[i] = max(dp[i], dp[j] + 1) if nums[i] > nums[j], j from 0 to i思路二:维护一个数组,vec[i]表示,当递增序列长度是i的时候最后一...原创 2018-09-22 00:01:08 · 445 阅读 · 0 评论