05 2014 档案

摘要:C++的前世今生: C的结构化思想; Ada的模版思想; Fortran的运算符重载思想; Simula的OO思想:封装,继承,多态; C++类型描述了变量的三个特征: 该类型在内存中占用物理空间的大小(空间读取范围); 该类型的值的合法的取值范围(位模式解释方法); 合法的操作集(数据的用法); 阅读全文
posted @ 2014-05-31 11:21 Leo C. 阅读(745) 评论(0) 推荐(0) 编辑
摘要:议题:二分查找树性能分析(Binary Search Tree Performance Analysis)分析:二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任何节点的键值大于等于该节点左子树中的所有键值,小于等于该节点右子树中的所有键值,并且每个节点域中保存 一... 阅读全文
posted @ 2014-05-31 10:19 Leo C. 阅读(1167) 评论(0) 推荐(0) 编辑
摘要:议题:基于堆的优先级队列(最大堆实现)分析:堆有序(Heap-Ordered):每个节点的键值大于等于该节点的所有孩子节点中的键值(如果有的话),而堆数据结构的所有节点都按照完全有序二叉树 排。当使用数组存储这种数据结构时,在数组大小限制和堆大小限制下,如果当前节点下标为i,其父亲节点下标为i/2,... 阅读全文
posted @ 2014-05-31 09:58 Leo C. 阅读(555) 评论(0) 推荐(0) 编辑
摘要:议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小)分析:算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法;使用显示下推栈存储快速排序中的每一次划分结果 (将left和right都压入堆栈),并且首先处理划分序列较短的子序列(也就是在得... 阅读全文
posted @ 2014-05-30 10:13 Leo C. 阅读(658) 评论(0) 推荐(0) 编辑
摘要:议题:快速排序算法实现之三(三路划分遍历,解决与划分元素相等元素的问题)分析:算法原理:使用三路划分策略对数组进行划分(也就是荷兰国旗问题,dutch national flag problem)。这个实现是对实现二的改进,它添加处理等于划分元素的值的逻辑,将所有等于划分元素的值集中在一起,并且以后... 阅读全文
posted @ 2014-05-30 09:54 Leo C. 阅读(803) 评论(0) 推荐(0) 编辑
摘要:议题:快速排序实现之一(单向遍历)分析:算法原理:主要由两部分组成,一部分是递归部分QuickSort,它将调用partition进行划分,并取得划分元素P,然后分别对P之前的部分和P 之后的部分递归调用QuickSort;另一部分是partition,选取划分元素P(随机选取数组中的一个元素,交换... 阅读全文
posted @ 2014-05-30 09:39 Leo C. 阅读(1859) 评论(0) 推荐(0) 编辑
摘要:四种基本算法概述:基本排序:选择,插入,冒泡,希尔。上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件。前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成正比;前三种算法在平均,最坏情况下都是N2,而且都不需要额外的内存;所以尽管他们的运行时间只相差常数倍... 阅读全文
posted @ 2014-05-30 09:21 Leo C. 阅读(535) 评论(0) 推荐(0) 编辑
摘要:议题:KMP算法(D.E. Knuth, J.H. Morris, V.R. Pratt Algorithm)分析:KMP算法用于在一个主串中找出特定的字符或者模式串。现在假设主串为长度n的数组T[1,n],模式串为长度m的数组P[1,m];数组T和P满足:n>m,且所有元素都来自有限字母表中的字符... 阅读全文
posted @ 2014-05-29 11:19 Leo C. 阅读(668) 评论(0) 推荐(0) 编辑
摘要:红黑树(Red-Black Tree)红黑树是一种BST,但是每个节点上增加一个存储位表示该节点的颜色(R或者B);通过对任何一条从root到leaf的路径上节点着色方式的显示,红黑树确保所有路径的差值不会超过一倍,最终使得BST接近平衡;红黑树内每个节点包含五个属性:color, key, lef... 阅读全文
posted @ 2014-05-29 10:51 Leo C. 阅读(638) 评论(0) 推荐(0) 编辑
摘要:广度优先搜索&深度优先搜索(Breadth First Search & Depth First Search)BFS优缺点:同一层的所有节点都会加入队列,所以耗用大量空间;仅能非递归实现;相比DFS较快,空间换时间;适合广度大的图;空间复杂度:邻接矩阵O(N^2);邻接表O(N+E);时间复杂度:... 阅读全文
posted @ 2014-05-29 10:01 Leo C. 阅读(1374) 评论(0) 推荐(0) 编辑
摘要:图最短路径算法(Graph Shortest Path Algorithm, eg: Floyd-Warshall, Dijkstra, Bellman-Ford, SPFA, Kruskal, Prim, Johnson)最短路径问题有多个衍生问题(并且每个衍生问题都涉及是否有负权边)单源点最短路... 阅读全文
posted @ 2014-05-28 10:23 Leo C. 阅读(1221) 评论(0) 推荐(0) 编辑
摘要:A*搜索算法(A Star Search Algorithm)A*算法主要用于在二维平面上寻找两个点之间的最短路径。在从起始点到目标点的过程中有很多个状态空间,DFS和BFS没有任何启发策略所以穷举所有的状 态空间,不适合仅需对局部进行搜索的应用。启发式搜索的关键在于:当前节点在选择下一步节点的时候... 阅读全文
posted @ 2014-05-28 09:56 Leo C. 阅读(2277) 评论(0) 推荐(0) 编辑
摘要:B树(B-Tree)1970年由R. Bayer和E. Mccreight提出的一种适用于外查找的树,一种由BST推广到多叉查找的平衡查找树,由于磁盘的操作速度远小于存储器的读写速度,所以要求在尽量少 的操作次数内完成CPU分配的任务,B树就按照此原则设计,B树与红黑树的主要区别在于B树节点可以有超... 阅读全文
posted @ 2014-05-28 09:50 Leo C. 阅读(446) 评论(0) 推荐(0) 编辑
摘要:二叉堆(Binary Heap)二叉堆是完全二叉树(或者近似完全二叉树);其满足堆的特性:父节点的值>=(<=)任何一个子节点的键值,并且每个左子树或者右子树都是一 个二叉堆(最小堆或者最大堆);一般使用数组构建二叉堆,对于array[i]而言,其左子节点为array[2*i],其右子节点为 arr... 阅读全文
posted @ 2014-05-28 09:28 Leo C. 阅读(1629) 评论(0) 推荐(0) 编辑
摘要:乔家大院朱秀海"善于不善,那在于个人自为",当乔致庸有机会将达盛昌一举打败,为死去的乔致广报仇的时候,他最终坚定而从容地说出这番话。晋商的对内管理的制度,和对外经营的策略不亚于现今任何一家大型企业;这再次印证了一个事实:道理谁都明白,但真正做起来就很难。当乔致庸挣扎着要办票号的时候,孙茂才的一番言语 阅读全文
posted @ 2014-05-27 10:19 Leo C. 阅读(567) 评论(0) 推荐(0) 编辑
摘要:议题:AC自动机(Aho-Corasick Automation)分析:此算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一;一个常见的例子就是给定N个单词,给定包含M个字符的文章,要求确定多少个给定的单词在文章中出现过;AC自动机在匹配文本时不需要回溯,处理时间复杂度与pattern无关... 阅读全文
posted @ 2014-05-27 10:15 Leo C. 阅读(1036) 评论(0) 推荐(0) 编辑
摘要:议题:动态规划(Dynamic Programming)分析:DP主要用于解决包含重叠子问题(Overlapping Subproblems)的最优化问题,其基本策略是将原问题分解为相似的子问题,通过求解并保存最简单子问题的解,然后逐步合并成为原问题的解,由于需 要查询子问题的解,所以需要一个表格记... 阅读全文
posted @ 2014-05-27 10:09 Leo C. 阅读(470) 评论(0) 推荐(0) 编辑
摘要:议题:布隆过滤器(Bloom Filter)分析:BF由一个很长的二进制向量和一系列随机映射的函数组成,通过多个Hash函数将一个元素映射到一个Bit Array中的多个点,查询的时候仅当所有的映射点都为1才能判断元素存在于集合内;BF用于检索一个元素是否在一个集合中,记忆集合求交集;优点是空间 和... 阅读全文
posted @ 2014-05-27 09:58 Leo C. 阅读(353) 评论(0) 推荐(0) 编辑
摘要:议题:线段树(Interval Tree)分析:线段树是一种二叉搜索树,将一个大区间划分成单元区间,每个单元区间对应一个叶子节点;内部节点对应部分区间,如对于一个内部节点[a, b]而言,其左子节点表示的区间为[a, (a+b)/2],其右子节点表示的区间为[1+(a+b)/2, b];对于区间长度... 阅读全文
posted @ 2014-05-27 09:52 Leo C. 阅读(1120) 评论(0) 推荐(0) 编辑
摘要:议题:线索二叉树(Threaded Binary Tree)分析:为除第一个节点外的每个节点添加一个指向其前驱节点的指针,为除最后一个节点外的每个节点添加一个指向其后续节点的指针,通过这些额外的指针可以某种遍历方式对二叉树进行遍历,而加了这些额外指针的二叉树就是线索二叉树;对于含有N个节点的二叉树而... 阅读全文
posted @ 2014-05-26 09:52 Leo C. 阅读(757) 评论(0) 推荐(0) 编辑
摘要:议题:后缀数组(Suffix Array)分析:后缀树和后缀数组都是处理字符串的有效工具,前者较为常见,但后者更容易编程实现,空间耗用更少;后缀数组可用于解决最长公共子串问题,多模式匹配问题,最长回文串问题,全文搜索等问题;后缀数组的基本元素:给定一个string,其长度为L,后缀指的是从strin... 阅读全文
posted @ 2014-05-26 09:48 Leo C. 阅读(597) 评论(0) 推荐(0) 编辑
摘要:议题:TRIE树 (Trie Tree or Prefix Tree);分析:又称字典树或者前缀树,一种用于快速检索的多叉树结构;英文字母的Trie树为26叉树,数字的Trie树为10叉树;All the descendants of a node have a common prefix of t... 阅读全文
posted @ 2014-05-26 09:23 Leo C. 阅读(403) 评论(0) 推荐(0) 编辑
摘要:议题:并查集(Union-Find Sets)分析:一种树型数据结构,用于处理不相交集合(Disjoint Sets)的合并以及查询;一开始让所有元素独立成树,也就是只有根节点的树;然后根据需要将关联的元素(树)进行合并;合并的方式仅仅是将一棵树最原始的节点的父亲索引指向另一棵树;优化:加入一个ra... 阅读全文
posted @ 2014-05-26 09:11 Leo C. 阅读(351) 评论(0) 推荐(0) 编辑
摘要:出题:要求层序遍历二叉树,从上到下的层次,每一层访问顺序为从左到右,并将节点一次编号,输出如下;如果只要求打印指定的level的节点,应该如何实现。 a b c d e f g h i分析:原始的层序遍历类似于BFS,打印当前访问的节点curNode的序列号,并将其直接子节点放入队列queu... 阅读全文
posted @ 2014-05-25 14:45 Leo C. 阅读(193) 评论(0) 推荐(0) 编辑
摘要:出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数;分析:最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点;所以计算出以每个节点为根节点的子树的最 远距离,最后取他们的最大值就是整棵树的最远距离;如果递归层次过多造... 阅读全文
posted @ 2014-05-25 14:40 Leo C. 阅读(412) 评论(0) 推荐(0) 编辑
摘要:出题:求数组中最长递增子序列的长度(递增子序列的元素可以不相连);分析:解法1:应用DP之前需要确定当前问题是否具有无后效性,也就是每个状态都是对之前状态的一个总结,之后的状态仅会受到前一个状态的影响;对于递增子序列 而言,可以首先确定前面k个元素的最长子序列,然后计算增加一个元素之后的最长子序列。... 阅读全文
posted @ 2014-05-25 14:35 Leo C. 阅读(339) 评论(0) 推荐(0) 编辑
摘要:出题:给定一个数字序列,其中每个数字最多出现两次,只有一个数字仅出现了一次,如何快速找出其中仅出现了一次的数字;分析:由于知道一个数字异或操作它本身(X^X=0)都为0,而任何数字异或操作0都为它本身,所以当所有的数字序列都异或操作之后,所有出现两次的数字异或操作之后的结果都为0,则最后剩下的结果就... 阅读全文
posted @ 2014-05-25 14:32 Leo C. 阅读(375) 评论(0) 推荐(0) 编辑
摘要:出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排序,则最少需要翻转几次,才能达到大小有序的结果(改变饼的顺序只能整体翻转,不能相邻交换);分析:假设... 阅读全文
posted @ 2014-05-25 14:28 Leo C. 阅读(376) 评论(0) 推荐(0) 编辑
摘要:出题:多人按照从低到高排成一个前后队列,如果前面的人比后面的高就认为是一个错误对; 例如:[176,178,180,170,171]中的错误对为 , , , , , 。 现在要求从一个整数序列中找出所有这样的错误对;分析:逆序对(Inversion Pair):在N个可判断大小的数中,逆序... 阅读全文
posted @ 2014-05-24 10:03 Leo C. 阅读(283) 评论(0) 推荐(0) 编辑
摘要:出题:要求将一个有序整数数组转换成最小深度的Binary Search Tree表示;分析:由于需要是最小深度,所以BST应保持平衡,左右节点数大致相当,并且BST中当前根节点大于所有其左子树中的元素,小于所有其右子树中的元素。对于排序数组而言,中间元素必然作为根节点,然后递归对由中间元素分割的左右... 阅读全文
posted @ 2014-05-24 09:52 Leo C. 阅读(612) 评论(0) 推荐(0) 编辑
摘要:出题:在已经排序的数组中,找出给定数字出现的次数;分析:解法1:由于数组已经排序,所以可以考虑使用二分查找确定给定数字A的第一个出现的位置m和最后一个出现的位置n,最后m-n+1就是A出现的次数;使用二分查找可疑快速确定给定数字,但是如果确定其左右范围则比较麻烦,对编码细节要求较高;解法2:Hash... 阅读全文
posted @ 2014-05-24 09:45 Leo C. 阅读(477) 评论(0) 推荐(0) 编辑
摘要:出题:一个长度为N的数组,其中的元素取值范围是1到N,要求快速判断数组是否存在重复数字;分析:解法1:如果N个元素的范围都是在1到N,所以如果没有重复元素,则每一个位置恰好可以对应数组中的一个元素之,通过将当前元素k交换到其本身应该在的位 置k,也就是k=array[i], array[array[... 阅读全文
posted @ 2014-05-24 09:40 Leo C. 阅读(1841) 评论(0) 推荐(0) 编辑
摘要:出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序;分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字母对应位置为false的重新标记为true并保留节点,将字母对 应位置为true的保持并删除节点;时间... 阅读全文
posted @ 2014-05-23 11:15 Leo C. 阅读(818) 评论(0) 推荐(0) 编辑
摘要:出题:判断一个单向链表是否有环,如果有环则找到环入口节点;分析:第一个问题:使用快慢指针(fast指针一次走两步,slow指针一次走一步,并判断是否到达NULL,如果fast==slow成立,则说明链表有环);第二个问题:fast与slow相遇时,slow一定还没有走完一圈(反证法可证明);示意图A... 阅读全文
posted @ 2014-05-23 10:42 Leo C. 阅读(240) 评论(0) 推荐(0) 编辑
摘要:出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字;分析:从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作;注意有四种打印模式(左右,上下,右左,下上),所以需要一个index变量控制每次循环时执行的打印模式;注意水平打印和垂直打印分别需要两个变量控制... 阅读全文
posted @ 2014-05-23 10:35 Leo C. 阅读(312) 评论(0) 推荐(0) 编辑
摘要:出题:定义一个复杂链表:在单向链表的基础上,每个节点附加一个指向链表中其他任意节点的指针sibling,实现CNode* Clone(Cnode *head)函数复制这个复杂链表;分析:解法1:将head复制到CHead中,第一次遍历创建CHead中对应head的各个节点(next),第二次遍历创建... 阅读全文
posted @ 2014-05-23 10:29 Leo C. 阅读(184) 评论(0) 推荐(0) 编辑
摘要:出题:数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字;分析:解法1:首先对数组进行排序,时间复杂度为O(NlogN),由于有一个数字出现次数超过了数组的一半,所以如果二分数组的话,划分元素肯定就是这个数字;解法2:首先创建1/2数组大小的Hash Table(哈希表可以替代排序时间,... 阅读全文
posted @ 2014-05-22 10:12 Leo C. 阅读(250) 评论(0) 推荐(0) 编辑
摘要:出题:数值的整数次方(不考虑溢出),实现函数double Power(double base, int exponent);分析:解法1:最简单的方法是使用直接的乘法运算,但是注意处理几种特殊情况:exponent为负数,base为0;解法2:将exponent分解成2的不同次方相加的表达式,通过重... 阅读全文
posted @ 2014-05-22 09:45 Leo C. 阅读(299) 评论(0) 推荐(0) 编辑
摘要:出题:将一个数组最开始的k个(K小于数组大小N)元素照搬到数组末尾,我们称之为数组的旋转;现在有一个已经排序的数组的一个旋转,要求输出旋转数组中的最小元素,且时间复杂度小于O(N);分析:时间复杂度小于O(N)也就是不能用常规的遍历思路;可以将数组看成两个都是递增序列(假设为升序)的子数组,并且前半... 阅读全文
posted @ 2014-05-22 09:32 Leo C. 阅读(264) 评论(0) 推荐(0) 编辑
摘要:出题:要求用递归将一个栈结构的元素内外颠倒;分析:本题再次说明系统栈是程序员最好的帮手,但递归度较高所以时间复杂度较大,可以使用空间换时间的方法(额外数组保存栈元素,然后逆向压入);第一层递归(清空栈元素,并使用系统栈保存):[1,2,3,4,5],栈顶元素为1,将1弹出之后,递归处理[2,3,4,... 阅读全文
posted @ 2014-05-22 09:26 Leo C. 阅读(286) 评论(0) 推荐(0) 编辑
摘要:出题:将只包含2,3,5的因子的数称为丑数(Ugly Number),要求找到前面1500个丑数;分析:解法1:依次判断从1开始的每一个整数,2,3,5是因子则整数必须可以被他们其中的一个整除,如果不包含任何其他因子则最终的结果为1;解法2:小丑数必然是某个大丑数的因子,也就是乘以2,3,或者5之后... 阅读全文
posted @ 2014-05-22 09:19 Leo C. 阅读(268) 评论(0) 推荐(0) 编辑
摘要:出题:给定两个单向链表的头结点,判断其是否有公共节点并确定第一个公共节点的索引;分析:由于是单向链表,所以每个节点有且仅有一个后续节点,所以只可能是Y型交叉(每条链表中的某个节点同时指向一个公共节点,并共享后面的所有节点)。首先计 算每条链表的长度,m和n(m>n);然后设定两个指针A和B分别指向两... 阅读全文
posted @ 2014-05-21 09:43 Leo C. 阅读(300) 评论(0) 推荐(0) 编辑
摘要:出题:给定链表的头指针和一个节点指针,要求在O(1)的时间复杂度下删除该节点分析:如果需要删除的节点为A,其前序节点为A-,其后续节点为A+,所以删除A之后,需要使得A-的下一个节点就是A+,常规做法是设法得到A-的索引,需要 从链表头开始遍历所以时间复杂度为O(N),但实际情况是只要保证A-的下一... 阅读全文
posted @ 2014-05-21 09:27 Leo C. 阅读(164) 评论(0) 推荐(0) 编辑
摘要:出题:输入一个数组,要求通过交换操作将奇数索引的元素调整到数组前半部分,偶数索引的元素调整到数组后半部分;分析:当然如果没有额外要求的话很容易实现,最好使用In-Place的实现策略;考虑插入排序的策略,不过这里的判断条件是遇到第一个奇数的时候才停止。时间复杂度为O(N^2);另外可以使用快速排序策... 阅读全文
posted @ 2014-05-21 09:20 Leo C. 阅读(280) 评论(0) 推荐(0) 编辑
摘要:出题:要求判断二元树的深度(最长根节点到叶节点的路径);分析:二元递归不容易使用循环实现解题: 1 struct Node { 2 int value; 3 Node *left; 4 Node *right; 5 }; 6 /** 7 * 首先考虑... 阅读全文
posted @ 2014-05-21 09:11 Leo C. 阅读(534) 评论(0) 推荐(0) 编辑
摘要:出题:输入一个整数N,求从1到N这N个整数的十进制表示中‘1’出现的次数;分析:从左向右处理string表示的数字;当前数字长度为n,判断最左边一位数字字符;如果是0,则直接递归下一位;如果是1,则计数有两个来源,一个是n位数数字(实际就是除去最高位之后的数字大小,加上1,当其余位全部为0的时候),... 阅读全文
posted @ 2014-05-20 11:06 Leo C. 阅读(741) 评论(0) 推荐(0) 编辑
摘要:出题:输入一个整数,要求计算此整数的二进制表示中1的个数分析:如果整数表示为k,当其是负数的时候,使用10) {17 /**18 * 此判断条件可以替换为 k&1 == 119 * */20 ... 阅读全文
posted @ 2014-05-20 10:33 Leo C. 阅读(427) 评论(0) 推荐(0) 编辑
摘要:出题:反转链表(递归和非递归解法);分析:有递归跟非递归实现,注意对原始链表头节点的处理,因为其他节点都指向下一个节点,其需要指向NULL;解题: 1 struct Node { 2 int v; 3 Node *next; 4 }; 5 Node* NonRecur... 阅读全文
posted @ 2014-05-20 10:24 Leo C. 阅读(338) 评论(0) 推荐(0) 编辑
摘要:出题:将输入的表示整数的字符串转变为对应的整数值;分析:每当右边增加一位,说明之前的sum应该高一个数量级,所以*10。由于这两个实现仅仅考虑正规的、正整数输入,所以需要一个Wrapper函数,其功能 主要处理:符号判断(第一个字符是-,+或者直接是数字);非法输入判断(是否有非"012345678... 阅读全文
posted @ 2014-05-20 10:19 Leo C. 阅读(319) 评论(0) 推荐(0) 编辑
摘要:出题:Josephus Cycle,约瑟夫环问题。k个数字连成一个环,第一个数字为1。首先从1开始计数删除第m个数字;然后从上次被删除的数字的下一个数字开始计数,删除第m个数字;重复进行第二步直到只剩下一个数字;输出最后剩下的一个数字;分析:解法1:考虑到问题的特殊性,可以使用哑元素表示删除的元素从... 阅读全文
posted @ 2014-05-19 09:30 Leo C. 阅读(238) 评论(0) 推荐(0) 编辑
摘要:出题:要求实现层序遍历二元搜索树,并对比BFS与DFS的区别分析:层序遍历也就是由上至下,从左到右的遍历每一层的节点,类似于BFS的策略,使用Queue可以实现,BFS不能用递归实现(由于每一层都需要存储所有节点,所以非常耗用内存)。这段代码主要用于反映BFS与DFS的联系;解题: 1 class... 阅读全文
posted @ 2014-05-19 09:25 Leo C. 阅读(484) 评论(0) 推荐(0) 编辑
摘要:出题:输入一个已经升序排序的数组和一个数字;要求在数组中查找两个数,这两个数的和正好等于输入的那个数字,输出任意一对数字就可以,要求时间复杂度是O(n);分析:对于升序排序的数组{…i…j…k…m……},只有可能是i+m=j+k(j和k可能是同一个数),所以可以从两边往中间收缩而忽视其他交叉相加的情... 阅读全文
posted @ 2014-05-18 20:15 Leo C. 阅读(191) 评论(0) 推荐(0) 编辑
摘要:1.我们会去看一部电影,无非是想从电影里看到我们自己。比如《星空》,比如《失恋33天》,比如《那些年,我们一起追过的女孩》,只是毫无例 外地我们无法跟着电影里的人物一起长大,你不是十三岁,你也不是十七岁,你失恋早就过了三十三天,你的身边也没能有个王小贱。回忆没有变,离开的是我们自 己。前两天看邮件还 阅读全文
posted @ 2014-05-18 20:07 Leo C. 阅读(207) 评论(0) 推荐(0) 编辑
摘要:出题:输入一个单向链表,要求输出链表中倒数第K个节点分析:利用等差指针,指针A先行K步,然后指针B从链表头与A同步前进,当A到达链表尾时B指向的节点就是倒数第K个节点;解题: 1 struct Node { 2 int v; 3 Node *next; 4 }; 5 ... 阅读全文
posted @ 2014-05-18 20:02 Leo C. 阅读(210) 评论(0) 推荐(0) 编辑
摘要:出题:输入一个整数数组,判断该数组是否符合一个二元查找树的后序遍历(给定整数数组,判定其是否满足某二元查找树的后序遍历);分析:利用后序遍历对应到二元查找树的性质(序列最后一个元素必定是根节点,从左向右第一个比根节点大的元素开始直到根节点之前的所有元素必定在右子树,之前的所有元素必定在左子树);解题... 阅读全文
posted @ 2014-05-18 19:59 Leo C. 阅读(379) 评论(0) 推荐(0) 编辑
摘要:出题:预先输入一个整型数组,数组中有正数也有负数;数组中连续一个或者多个整数组成一个子数组,每个子数组有一个和;求所有子数组中和的最大值,要求时间复杂度O(n);分析:时间复杂度为线性表明只允许一遍扫描,当然如果最终的最大值为0表明所有元素都是负数,可以用线性时间O(N)查找最大的元素。具体算法策略... 阅读全文
posted @ 2014-05-16 16:10 Leo C. 阅读(357) 评论(0) 推荐(0) 编辑
摘要:出题:把二元查找树转变成排序的双向链表。输入一棵二元查找树,要求将该二元查找树按照中序转换成一个排序的双向链表,要求不能创建任何新的节点,只能调整指针的指向;分析:递归的思路,当前节点需要进行的处理,并使用递归调用和返回值将子问题链接起来;首先明白二元查找树的特性,变成有序双向链表后当前根节点的左节... 阅读全文
posted @ 2014-05-16 12:11 Leo C. 阅读(509) 评论(0) 推荐(0) 编辑
摘要:出题:请实现给定String的类定义;分析:注意检查标准类构造注意事项;解题: 1 #include 2 #include 3 /** 4 * 检查是否需要构造函数 5 * 检查是否需要无参构造函数 6 * 检查是否需要成员变量(函数)私有 7 * 检查是否需要在构造函数预初始化成员变量... 阅读全文
posted @ 2014-05-16 11:13 Leo C. 阅读(236) 评论(0) 推荐(0) 编辑
摘要:出题:输入N个整数,要求输出其中最小的K个数;分析:快速排序和最小堆都可以解决最小(大)K个数的问题(时间复杂度为O(NlogN));另外可以建立大小为K的最大堆,将前K个数不断插入最大堆,对于之后的N-K个数,依次与堆顶元素进行比较,如果新元素更小则删除当前堆顶元素,并更新最大堆;如果新元素大则跳... 阅读全文
posted @ 2014-05-15 17:57 Leo C. 阅读(319) 评论(0) 推荐(0) 编辑
摘要:出题:N阶阶乘问题的递归算法和非递归算法;分析:第一种解法:普通暴力解法的实现较为容易;第二种解法:stirling公式可快速给出近似解;解题: 1 int Recursive(int s) { 2 if(1 == s) { 3 return s; 4... 阅读全文
posted @ 2014-05-15 17:48 Leo C. 阅读(385) 评论(0) 推荐(0) 编辑
摘要:出题:将字符串“ABCD1234efgh”进行前后对调;分析:常见的考查指针使用的案例,知道字符串长度之后,依次交换位置i以及位置(length-1-i)上的内容,直到重叠;注意不能直接修改指针变量索引的常量字符串;解题: 1 #include 2 #include 3 void reverse... 阅读全文
posted @ 2014-05-15 17:09 Leo C. 阅读(300) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示