11 2013 档案
摘要:真的没有想到,以前不曾关注的归并排序原来是这么的复杂。其实,快速排序、堆排序以及归并排序都用到了递归思想,难点就是找出递归形式和递归出口。然而,归并排序还是实际中能够应用到的一种算法--分布式处理。因为,现实中,数据量会比较大,超出一台计算机的内存上限是可能的,这就需要将数据分配到若干台计算机上并行计算。这和现在正在学习的hadoop又不谋而合,因此,现在来学一下归并排序。对于归并排序,因为所选的数据结构不同,它的实现也不大相同,但原理上还是一样的。都是先将数据一分再分,直到有序为止(也就是每个分项中只有一个元素的时候),然后两两开始合并,直至合并为一个有序项为止。下面先看看它的数组结构下的实
阅读全文
摘要:题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:则输出:yes又如输入7、4、6、5 ;因没有对应的二元查找树的后序遍历是次序列,则输出no简单的分析一下这道题:后序遍历也就是说最后的一个节点是根节点,二元查找树又要求它的左子树不大于(或不小于)根节点,右子树不小于(或不大于)根节点。因此,思路也就来了:先把它的根节点拿出来,然后从首元素开始遍历,与根节点比较,直到找出大于根节点的元素来,然后再遍历后面的是否有小于根节点的元素(只考虑左子树不大于根节点,
阅读全文
摘要:题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。两种思路,无非就是时间与空间的妥协。限制空间的时候要对原数组进行排序,最好的时间复杂度是O(nlogn),由此可见,当牺牲一部分空间的时候会换来时间复杂度的降低。进而再想到利用一个大小为K的临时数组,来存储K个最小的值,在遍历原数组的同时,更新临时数组里的数据就OK了。那么,现在的问题就是更新临时数组,怎样才能每访问一个数据,都能使临时数组里的数据是最小的K个。自然想到选出临时数组里面的最大值,和原数组里的新访问的值进行比较,判断是否替换最大值。遍历原数组的时间复杂度是O
阅读全文
摘要:题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。如:输入整数25,则输出 10 7 8;10 15输入整数22,则输出 10 7 5思路是运用前序遍历的递归方法,访问这课二叉树,在访问的同时,用一个栈来存放每个节点的数据,这样,当到达叶子节点是就判断其和是不是与输入的整数相等,相等的话就遍历这个栈。解题的难点就是存储路径,一开始的想法是复制节点,构造一个只用到左子树的单链表来存储,不过,感觉这样做下去会很繁琐,所以就换成构造栈来存储数据。这样通过递归的方法来push与pop数据,很般配。要注意的是,下面在构造二
阅读全文
浙公网安备 33010602011771号