数据结构
文章平均质量分 92
S大幕
小学僧
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】剑指Offer——面试题48:最长不含重复字符的子字符串
总觉得书上这题讲的怪怪的,所以将自己的思路写下来。题目描述: 请从字符串中找出一个最长的不包含重复数字的子字符串,计算该最长子字符串的长度。假设字符串中仅包含 ‘a’~’z’ 之间的字符。例如,在字符串 “arabcacfr” 中,最长的不包含重复字符的子字符串是 “rabc” 或 “acfr”,所以应当输出 4。分析: 考虑使用动态规划法 因为所有可能出现的字符...原创 2018-04-23 21:03:20 · 1091 阅读 · 0 评论 -
【数据结构】牛顿法求平方根
from 计算平方根的算法主要介绍牛顿法: 公式如下: xn+1=12(xn+Sxn)xn+1=12(xn+Sxn)x_{n+1}=\frac{1}{2}\left(x_n+\frac{S}{x_n}\right)具体代码试下如下:double sqrt_(double x) { double g=x; while(ABS(g*g-x)&g...转载 2018-03-29 12:12:45 · 504 阅读 · 0 评论 -
【数据结构】多数组上中位数/多数组中第 K 大的数(Olog(n))
/** 题目描述给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数。* 例如:* arr1 = {1,2,3,4};* arr2 = {3,4,5,6};* 一共8个数则上中位数是第4个数,所以返回3。** arr1 = {0,1,2};* arr2 = {3,4,5};* 一共6个数则上中位数是第3个数,所以返回2。* 要求:时间复杂度O(...原创 2018-03-26 09:49:05 · 1199 阅读 · 0 评论 -
【数据结构】递归
1. 递归定义定义新对象或者新概念的基本规则之一是:定义中只能包含已经定义过得或含义明显的术语。因此,如果对象根据它自身来进行定义,这就严重违反了这一规则,从而导致恶心循环。而另一方面,有许多编程概念是根据自身进行定义的。此时,需要给定义加上形式上的约束,以保证其满足存在性和唯一性,不违反上述规则。这样的定义称为递归定义。主要用于定义无限集合。定义无限集合时,不可能列举出该集合中的所有元素,对于一些原创 2017-10-07 20:56:41 · 1943 阅读 · 0 评论 -
【数据结构】STL中的vector和list
表的ADT有两种流行的实现方法,vector提供表ADT的一种可增长的数组实现。使用vector的有点在与它是以常数时间可索引(indexabel)的。缺点是插入新项和删除现有项的代价高昂,除非变化发生在vector的尾端。而list则提供表ADT的双向链表实现。使用list的有点事插入新项和删除现有项代价地炼,但是假设变动的位置是已知的。缺点是list不用一被索引,vector和list两者在执行原创 2017-09-19 10:54:16 · 1189 阅读 · 0 评论 -
【数据结构】队列
# 队列 ADT1. 队列模型队列的基本操作是 enqueue(入队),它是在表的末端(叫做队尾(rear))插入一个元素,以及dequeue(出队),它是删除(并返回)在表的开头(叫做对头(front))的元素。所以,与栈不同的是,队列是一种使用两端的结构:一端用来加入新元素,另一端用来删除元素。因此,最后一个元素必须等到排在它之前的所有元素都删除之后才能操作。队列是先进先出 (FIFO)的结构2原创 2017-09-25 14:14:25 · 462 阅读 · 0 评论 -
【数据结构】数据结构与算法分析第一章部分题目
1.选择问题,设有一组N个数要确定其中第K个最大者为了方便,使用了容器vector工具,但是排序时没有使用容器内的sort函数,而是重新写了选择排序法算法首先对前k个元素进行排序,然后再将剩下的元素逐个读入,当新的元素被读到时,如果小于数组中第k个元素则进行忽略,否则放到正确的位置上,并将数组中的一个元素挤出数组。当算法终止时,位于第k个位置上的元素作为答案进行返回。完成代码如下所示:原创 2017-09-03 10:50:47 · 1063 阅读 · 0 评论 -
【数据结构】栈
栈ADT栈( stack )是一个带有限制的表,它的插入和删除都只能在一个位置上进行,也就是只能在表的末端进行。这个末端就叫做栈顶(top).1.栈模型对栈的基本操作就是 push( 进栈 )和 pop( 出栈 ),前者等价于插入,而后者则是删除最近插入的元素。最近插入的元素在执行 pop 之前可以通过使用 top 例程进行考察。在栈 ADT 中,对空栈执行 pop 或 top 一般都被认为是一个错原创 2017-09-23 22:41:51 · 439 阅读 · 0 评论 -
【数据结构】对数运行时间算法(折半查找、最大公约、幂运算)
已经知道,某些分治算法将会以O(NlogN)的时间复杂度运行,此外,对数复杂度的算法出现的一般规律可以概括为下面的一般的法则:如果一个算法用常数(O(1))时间将问题的大小削减为其一部分(通常是1/2),那么这种算法就是O(log N)。另一方面,如果使用常数时间只是把问题减少一个常数的数量(如将问题减少1),那么这种算法就是O(N)的第一个例子是对于已经排好序(设为增序)的数组进行查原创 2017-09-06 21:47:29 · 1298 阅读 · 0 评论 -
【数据结构】跳跃链表(Skip list)
普通的链表存在一个严重的缺陷:需要顺序扫描才能找到所需要的元素。而且查找从链表的开头开始,只有找到了所需要的元素,或者直到链表的末尾都没有找到这个元素时才会停下来。将量表进行排序可以加速查找的过程,但是仍然需要顺序查找。因此,很容易想到,链表最好可以跳过某些节点,以避免顺序处理。从而,引出了跳跃链表,跳跃链表是有序链表的一个有趣的变种,可以进行非顺序查找。在有n个节点的跳跃链表中,对于原创 2017-09-13 11:04:11 · 1115 阅读 · 0 评论 -
【数据结构】最大子序列问题
已知序列A ={a1,a2,a3, ... ,aN}求序列A的最大子序列,已知序列A中均为整数,如果全为负数,直接返回0下面使用不同复杂度的算法进行实现:1.复杂度为O(N^3)算法使用三层for循环完成,因为比较容易理解,不再赘述,直接写出程序,代码如下所示://使用复杂度为O(N^3)的算法实现最大子序列问题#include #include using namespa原创 2017-09-04 00:16:05 · 1069 阅读 · 0 评论 -
【数据结构】二叉查找树
1.概念:二叉查找树也叫二叉搜索树,是一棵空树或者是具有一下性质的一颗二叉树a.每个节点都有一个作为搜索依据的关键码(key),而且所有的关键码的取值都互不相同。b.每个左子树(如果存在)所有节点的关键码都小于根节点的关键码。c.每个右子树(如果存在)所有节点的关键码都大于根节点的关键码。d.每个左子树和右子树也均为二叉搜索树。需要说明的是,关键码事实上是节点所保存元素中的原创 2017-03-02 16:59:56 · 540 阅读 · 0 评论 -
【数据结构】剑指 Offer P200——八皇后问题的排列解法
书中 P200 给出了不同于以往利用回溯法解决八皇后问题的思路,但是没有给出代码,下面对这种算法进行实现。 首先给出书中的解释: 由于 8 个皇后的任意两个均不能处于同一行,所以每一个皇后占据一行。于是可以定义一个数组 ColumnIndex[8],数组中第 i 个数字表示位于第 i 行的皇后的列号。首先将数组 ColumnIndex 的 8 个数字分别用 0~7 进行初始化,然...原创 2018-04-23 23:44:22 · 423 阅读 · 0 评论
分享