摘要: 题目:有一个升序的数组a和一个数字N,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。示例:数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。方案一:穷举遍历法,一个个比对查找,但这种方法没有好好利用有序这个条件。时间复杂度为O(n*n)。方案二:基本思路:找到两个数,将其和与N进行对比,并不断调整。实现方法:找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数字时,把较大的数字往前移动;当两个数字的和小于数字时,把较小的数字往后移动;当相等时,打完收工。当前后两个指标最 阅读全文
posted @ 2013-08-07 15:48 欧麦高德 阅读(244) 评论(0) 推荐(0)
摘要: 前序遍历:先遍历父节点,然后左子节点,然后右子节点。下图的遍历顺序为:1245367递归方式遍历:基本思想:对一个树的访问,可以分成访问当前节点,访问左子树和访问右子树。而访问左右子树时又可以看做是上述步骤的重复,因此可以递归的调用。代码流程:void preOrder(TNode* root){ if (root != NULL){ Visit(root); //访问当前节点 preOrder(root->left); //递归访问左子节点 preOrder(root... 阅读全文
posted @ 2013-08-05 21:11 欧麦高德 阅读(387) 评论(0) 推荐(0)
摘要: 冒泡排序算法:轻者上浮,重者下沉。(或者正好相反)基本思想:1.比较相邻的元素。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。本质上是:第一趟,选出最大(或最小)元素,第二趟,选出次大(或次小的)的元素…..示例:定义数组:{ 4, 2, 62, 9, 22, 1,14,10 }第1趟排序后:[2, 4, 9, 22, 1, 14, 10, 62] //选取最大元素62,放在了最后第2趟排序后:[2, 4, 9, 1, 14, 10, 22, 62] // 阅读全文
posted @ 2013-08-05 18:26 欧麦高德 阅读(211) 评论(0) 推荐(0)