
数据结构
文章平均质量分 58
sandyzhs
这个作者很懒,什么都没留下…
展开
-
两道微软面试题
[题记]猎头J看中了我,非要让我去M$;去就去吧,还非要面试;面就面吧,还非得出难题,真是的;简简单单的走走过场就行了吧,呵呵。这两个题目是hr给我出的题目之二(此处,hr需要强调,非常强调),我没有回答正确或者根本就不能回答。 [正文] 1,你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你原创 2008-09-25 12:02:00 · 792 阅读 · 0 评论 -
八皇后
问题:八皇后,水平线、垂直线、对角线位置上不能有能够见面的皇后 分析:使用回溯法,递归处理。实际上,用排列组合的思想也行,但是需要更多的检查。 代码:参考 Slyar 的实现,做了一小些整理;谢谢1)框架和主函数: // EightQueen.cpp : Defines the entry point for the console appli原创 2008-11-27 12:32:00 · 2990 阅读 · 0 评论 -
字符串匹配的KMP算法实现
问题源自数据结构书。 问题:字符串src中含有模式串pat的个数举例:src= 00000111111111101010111010101001pat=110src中含有多少个pat? 分析:没有回溯的KMP算法。1)首先实现一个next[]数字,其中的值,是匹配失误之后的下一次匹配的位置。next[0]=-1; next[1]=0;后面的多数都不是0。这个实原创 2008-11-25 13:25:00 · 836 阅读 · 0 评论 -
排序学习笔记(2) - 快速排序
学习排序,参考代码、测试程序:http://tech.ddvip.com/2006-12/116513859112852.html表示一下感谢~~ 交换排序。包括冒泡排序和快速排序,一般说来冒泡是不能给别人说的:怕丢脸,呵呵。所以我们就默认交换排序==快速排序。1. 思想a)它采用的是分而治之的策略(divide and conque)。基本思想是:任取待排序列的某个记录(这句原创 2008-11-19 15:25:00 · 963 阅读 · 0 评论 -
排序学习笔记(1) - 插入排序
学习排序,参考代码、测试程序:http://tech.ddvip.com/2006-12/116513859112852.html表示一下感谢~~1. 插入排序:1)直接插入排序稳定排序,性能:O(n^2);2)二分查找插入(折半插入排序)这个算法也是非常被大众使用的,折半、二分已经深入人心了。不过它的数据后移却给这个算法拖了后腿。不过没关系,我们能够从中得到解决问题的思想:折半!稳定排原创 2008-11-19 15:22:00 · 670 阅读 · 0 评论 -
排序学习笔记(5) - 内部排序小总结
把殷版的《数据结构》内部排序部分大致看了一遍,还是感觉到了收获。由于对基数排序(不是一个路数)和归并排序(额外n的存储空间,很致命)并不是很感兴趣,所以就没学习这两个部分。另外,外部排序还没开始,下一步即将开始。 大体的感想是:1,排序的思想和代码实现都有谱了。以前,一说到qsort,要写代码,难受死了,非常费劲,但这次看完之后感觉非常明白,甚至能够把代码背下来。想面我的,不怕了。原创 2008-11-20 14:00:00 · 802 阅读 · 0 评论 -
排序学习笔记(4) - 快速排序的非递归实现
quick sort的问题,前面说过了:1,少量数据的排序效果不好,还不如直接插入;2,对于特殊数据的处理,比如单边递增的有序序列,会出现极端差的情况;3,数据量大的话,会让栈溢出。 所以,有了一些性能提高方案,前面说过:1,少量数据时候用直接插入;2,选取pivot用三者的中值;3,去掉递归,使用栈,或者用数组来仿栈void qort_no_re原创 2008-11-20 10:07:00 · 1090 阅读 · 1 评论 -
排序学习笔记(3) - 交换排序,堆排序
学习排序,参考代码、测试程序:http://tech.ddvip.com/2006-12/116513859112852.html表示一下感谢~~ 交换排序。不稳定排序,性能:O(n*lg(n));1)直接选择排序,一个值和所有的其他值比较;比较N次2)锦标赛排序,没看,据说额外存储空间太大;3)堆排序原理:联想到最大堆的建立,建立之后最大值就出现了,这个时间是O(n原创 2008-11-19 18:23:00 · 762 阅读 · 0 评论 -
三个数字的中间值
原题是:只用两次比较,得到三个数的中间值。 背景:写快速排序的改进算法,取左、中、右三个值的中间值,作为pivot。但是,写了很久,居然写晕了,也不对。于是上网搜,发现,呵呵,很多人都做不对,或者能做对也非常慢。幸好找到的比较好的答案。 答案:不懂的千万别问我啊,据说这是初中数学题。if( (a-b)*(b-c)>0 ) return b;else原创 2008-11-19 15:02:00 · 4002 阅读 · 2 评论 -
最大子串,最大子回文
被鄙视了一道题,求一个字符串里面最大的子回文。 我想了想,基本的方案是:把字符串正看和反看,作为两个字符串,然后求最大子串--->这样就简单一些了。但是,说实话,如果在笔试的时候你能写出借助二维数组的那个版本到真是不太容易的一件事情。 所以,我觉得这个文章写的不错,简单,实用: http://blog.youkuaiyun.com/shaohui/archive/2006/0转载 2009-01-08 14:53:00 · 1204 阅读 · 0 评论 -
数组中最大和的子序列
数组中,一部分整数,一部分复数;当然可能全是复数。求出这个数值中能够得到最大和的子序列。 原理:用动态规划方法。一个临时变量记录从上一次负数开始的临时最大值的序列,如果它比上一个temp值大的话,就用它替代上一个成为最大的子值。注意:最后有一步骤检查,看是否全部的数据都是负数,如果是的话,重新搜索一遍数组找到最小的负数,作为最大子序列的值。bool FindG原创 2009-01-08 16:17:00 · 1044 阅读 · 0 评论 -
查找单向链表倒数第m个
绝对的原创。欢迎转载,转载时请标明出自hisense:[http://blog.youkuaiyun.com/sandyzhs] 题目:单向链表,长度未知,(方便说明,假设为n个),找出倒数第m个 分析:大众知道2个,我知道4个。 [大家知道的]1,遍历一次,查出链表长度,n;再次遍历,走n-m步,停止。时间复杂度:n+(n-m); 2,两个指针:p在前原创 2008-11-11 10:47:00 · 2183 阅读 · 1 评论 -
按位反转无符号字符
题目:一个unsigned char,记为src,把其中的字节高位和低位全部互换 分析:想找出src中某一位的bit,肯定是要拿一个该位为1其他位为0的char,记为flag,和他进行&,取出该位的值,记为onebit。把该onbit左移(或者右移,看是否现在已经到了中间点)一定位数,就变到了他应该放到的位。然后flag左移一位,再次&,取出下一位。这样,依次取出来然后把所有原创 2008-11-11 10:35:00 · 2681 阅读 · 0 评论 -
最大公约数和最小公倍数
看《数据结构》,忽然发现最大公约数原来这么简单,上学的时候是咋学的? 原理:1,最大公约数(G C D),使用欧几里德算法,也叫辗转求余法 g cd(a,b)=gc d(b,a mod b) 当b为0时,两数的最大公约数即为a2,最小公倍数(LCM) lcm(a, b)*gc d(a, b) = a*b 递归版本代码://两个数的最大公约数--欧几里原创 2008-11-07 15:56:00 · 872 阅读 · 0 评论 -
全排列
问题:n个数字的数组,进行全排列。 原理:1.先分成(1)和(2,3,4),然后对(2,3,4)全排列 2.把(1)分别和(2,3,4)中的数对调 3.比如一次调换(2),(1,3,4),然后对(1,3,4)全排列 4.调换的算完了,恢复,变成(1),(2,3,4),再调换下一个(3),(1,2,4) 代码:using namespace std;原创 2008-11-07 16:56:00 · 617 阅读 · 0 评论 -
大数乘法 和 多项式乘法
看数据结构,链表的应用,讲到他可以处理多项式的乘法。实际上也可以拿相似的思想做大数相乘,只是把输入源从链表变为数组即可。 基本原理:1,把两个数字a和b转换成字符,放到字符数组里;或者把数字的每一位隔离开分别放到数组里作为一位,这样更方便乘法处理。这样做的根本好处是:相乘的时候不会造成溢出。2,结果数组的长度,最大应该是a的长度+b的长度+1,所以定义一个这样的数组;3,原创 2008-11-06 15:04:00 · 873 阅读 · 0 评论 -
下一个是啥?1, 2, 6, 42, 1806, ???
今天收到朋友一个问题: 学校里学的数学是不是都退步啦,呵呵! .... 第六个数字是什么 ? 算算看吧,附上解开这个谜的人员名单,密码就是第六个数字。 1, 2, 6, 42, 1806, ??? 本来我是不屑于这类小问题的,但是这次还是想试一试,万一能解决那,呵呵。 拿出excel,126421806 ??原创 2008-11-06 13:49:00 · 2103 阅读 · 0 评论 -
八皇后详解
【历史】八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果,事实上就是有92种解法。 【问题】初原创 2009-06-08 09:29:00 · 6092 阅读 · 0 评论