
数据结构与算法
文章平均质量分 67
zbcdzbcd
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试题之数组篇
转至:http://www.cnblogs.com/graphics/archive/2010/08/24/1761620.html 感谢原作者的收集整理数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考,如果您有更好的题目或者想法,欢迎留言讨论。目前有以下18道题目,如果有好的题目,随时更新。数组求和求数组的最大值和最小值求数组的最大值转载 2014-03-11 14:16:24 · 1366 阅读 · 0 评论 -
一种二分查找变形
原始的二分查找非常简单,只要找到值返回即可;但是如果某原创 2014-09-01 15:30:03 · 785 阅读 · 0 评论 -
子串子序列相关面试题总结
注:子串是连续的,子序列则不连续1,求最长回文子串中心法应该是最为常用的办法,时间复杂度O(n^2)。输入字符串假设为”abcdedc";从左到右依次考虑以a为中心最长回文是多少,以ab中间的空为中心最长回文是多少,以b为中心最长回文是多少.......代码如下:int LPS(char *str, int n){ assert(str != NULL); int le原创 2014-03-28 10:16:34 · 1288 阅读 · 0 评论 -
面试题之链表篇
链表是面试重中之重,但题型比较死,考的是细心。这里做一个总结,会给出模板实现。如果错误,请不吝指教!1. 判断链表是否有环2.求链表中间节点(偶数则返回前一个节点)3.约瑟夫环问题4. 链表逆序输出(递归)5. 链表反转(非递归与递归)6.两个有序单链表的合并(非递归与递归)7.判断两个单链表是否相交8.接题7,若相交求第一个交点9. 删除链表某个节点10.原创 2013-11-05 15:19:55 · 1664 阅读 · 4 评论 -
面试题之二叉树篇
二叉树是面试中很重要的考点,类似中序非递归遍历、最低公共祖先、镜像、路径求值等问题屡见不鲜。 在这里总结常见的一些题目,并给出模板实现,希望能给求职的朋友一些帮助,也方便自己时时回顾。如有错误,请不吝指教!1. 有序数组递归建立二叉树2. 求叶子节点个数3. 求二叉树深度4. 求镜像5. 分层打印,打印一行后换行6. 判断二叉树是否平衡8. 判断是否是满二叉树9.原创 2013-11-05 11:31:00 · 1462 阅读 · 0 评论 -
求字符串编辑距离的递推和递归实现
递推实现:int CalculateDis_DP(char *str1,char *str2) { int i, j; int len1=strlen(str1), len2=strlen(str2); for (i=0;i<=len2;i++) d[0][i]=i; for (i=0;i<=len1;i++)原创 2014-03-26 10:47:58 · 1099 阅读 · 0 评论 -
一道亚马逊面试题(股票买卖问题)
题目:一个股价序列,已知每个时间点的股价,问什么时候买什么时候卖获利最大这道题O(N)空间复杂度和O(N)时间复杂度都不难想到:假设股价序列由a[N]表示,一种方法是开一个缓冲数组b[N-1],记录a[N]中每两个相邻元素的差值,然后问题转化为求b[N-1]的最大子数组和(当然必须知道最大子数组和的O(N)解法)。第二种方法是开一个缓冲数组b[N],依次存储以当前元素结尾的左侧数组最小值,然后原创 2014-03-20 14:21:03 · 1735 阅读 · 0 评论 -
求数组的逆序数
题目:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。现在,给你一个N个元素的序列,请你判断出它的逆序数是多少。比如 1 3 2 的逆序数就是1。方法1::O(n^2)这个就不说了。方法2: 借助归并排序达到O(nlgn)的时间复杂度,当然牺牲了一点空间。这里主要描述一下方法2,前提是原创 2014-04-01 11:21:28 · 3209 阅读 · 0 评论 -
随机概率相关的面试题
转至:http://blog.youkuaiyun.com/luckyxiaoqiang/article/details/87889061. 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。只调用一次rand7()肯定无法达到目的。我们调用两次rand7(),这样我们可以随机的得到1~49中的一个数,为什么呢?我们将49分成7段,1~转载 2014-03-19 13:55:35 · 917 阅读 · 0 评论 -
求连续子数组最大乘积
因为数组中存在正负零的情况,所以相比求连续子数组最大和的问题,求最大积稍微复杂一些,不过代码还是很简洁。假设数组为a[N],max[N] 表示以下标为 i 结尾的子数组乘积最大值,min[N] 表示以下标为 i 结尾的子数组乘积最小值。为了处理数组元素为负的问题,必须将最小乘积也保存起来。。很容易想到,若当前元素a[i]为负数,那么乘以a[i]*max[i-1]得到的并不一定比a[i]*m原创 2014-03-16 20:44:32 · 3952 阅读 · 0 评论 -
一道腾讯笔试题(已知一个数组,不使用除法构造另一数组)
题目:给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法;要求O(1)空间复杂度和O(n)的时间复杂度。观察b[j]的构造公式,发现它实际上是由两部分相乘得到。左边是a[i]到a[j-1]的乘积,右边是a[j+1]到a[N-1]的乘积,中间的a[j]被除掉了。接下来就是怎么实现的问题了。先从左向右扫描a[N原创 2014-03-18 10:11:25 · 1231 阅读 · 0 评论 -
栈和队列的相互模拟
1、用两个栈(s1,s2)实现一个队列(q)基本思想:入队列的时候都进入s1; 出队列的时候分情况,若s2不为空,则直接弹出s2栈顶元素,若s2为空,则将s1除栈底元素外依次出栈并压入s2,再弹出s1栈底元素即可。template class MyQueue{public: void push(T e) { s1.push(e); } T pop() { int原创 2014-02-22 20:49:29 · 864 阅读 · 0 评论 -
打印螺旋数组
已知M和N,要求打印一个M行N列的螺旋矩阵。比如M、N都为3,则打印1 2 3 8 9 47 6 5我们来看,因为是按螺旋状打印,我们更直观的可以将其理解为分层打印,比如上面的例子分为两层,第一层为:1、2、3、4、5、6、7、8;第二层为:9。 这样我们将问题转化为分层打印,而每一层有四个边,所以我们要考虑的是怎么将四条边合理的打印出来。为了表示每条边的原创 2014-03-13 16:00:02 · 1250 阅读 · 0 评论 -
打印集合的所有子集
已知一个集合,其子集包括空集和本身。怎样将所有的子集打印出来?最简单的O(N^3)算法不难想到,但是太过于朴素,应该还有更巧的方法。我们已知,一个元素个数为n的集合,其子集个数为2^n个。比如set { 1, 2 },含有两个元素,一共有四个子集,分别为{ },{ 1 },{ 2 },{ 1,2 }。 我们取一个只有两位的bitset,显然这个两位的bitset只有四种组合,00、01、10、原创 2014-03-12 14:43:30 · 3456 阅读 · 0 评论 -
常用排序算法C语言实现
1,冒泡排序void BubbleSort(int a[], int n){ int i, j, tmp; int flag = 1; for (i = 0; i < n && flag ; i++) { flag = 0; for (j = 0; j < n - i - 1; j++) if (a[j] > a[j+1]) { tmp = a[j]原创 2014-03-10 21:04:42 · 1158 阅读 · 0 评论