04 2014 档案

[原]求解一道腾讯笔试题(帮帮忙)
摘要:大家帮帮忙。 题:关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进行排序,若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX。 题目答案应该是正确的(好多年前的考研题).但是我有个疑问,感觉题目是不是有多个答案。因为排序算法有多个实现版本。多个版本导致第一趟的结果不同,但最终结果是一样的。 1... 阅读全文

posted @ 2014-04-19 22:07 狼牙灬月 阅读(197) 评论(0) 推荐(0)

[原]《面试题精选》14.圆圈中最后剩下的数字
摘要:题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。 分析:这是一道约瑟夫环问题。思路就是按照提中的步骤去执行,很明显用到的数据结构是循环双向链表,关键是循环双链表的实现。见:... 阅读全文

posted @ 2014-04-16 20:20 狼牙灬月 阅读(255) 评论(0) 推荐(0)

[原]《面试题精选》13.第一个只出现一次的字符
摘要:题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:首先拿到一到数据结构算法题,你会先想到什么?必然是我们要利用到什么数据结构来解决这道问题。首先想到的肯定是链表,栈,队列,可以吗?想了很久感觉不行,然后我又想到用各种树,感觉时间复杂度还是不好。最后,好吧,不会做。怎么办,看答案呗。然后发现,我ri,hash表,竟然忘了这东西... 阅读全文

posted @ 2014-04-16 16:49 狼牙灬月 阅读(210) 评论(0) 推荐(0)

[原]《面试题精选》12.求二元查找树的镜像
摘要:题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 /\ /\ 11 ... 阅读全文

posted @ 2014-04-16 14:54 狼牙灬月 阅读(153) 评论(0) 推荐(0)

[原]《面试题精选》11.链表中倒数第k个结点
摘要:题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 分析:这道题算是简单的了,很容易想到用到两个指针,因为用一个指针的话你必须要遍历链表两遍,所以用到两个距离为k的指针来实... 阅读全文

posted @ 2014-04-15 23:24 狼牙灬月 阅读(166) 评论(0) 推荐(0)

[原]《面试题精选》10.给一个有序数组和一个数s,求数组中两数和等于s的组合
摘要:题目:已知一个有序递增的数组array和一个数s,请找出两个数字之和等于s的两个数。如果右多个这样的组合,则只需要输出一个就行。 例如,如果数组array={1,2,4,7,11,15},数s=15,请输出4和11,因为4+11=15 分析:首先我们会想到肯定要遍历这个数组,我们都知道不管你利用那种算法遍历,最坏情况下最好的时间复杂度都是O(n)。也就是遍历一次数组... 阅读全文

posted @ 2014-04-15 21:54 狼牙灬月 阅读(2008) 评论(0) 推荐(0)

[原]《Thinking in Algorithm》12.详解十一种排序算法
摘要:排序算法在算法中占着很重要的地位,很多算法的实现都是基于排序算法的(如搜索算法和合并算法)。所以排序算法也是笔试面试中必考内容。但是不管他怎么考,也就是那几种算法,一般不会超出我接下来要讲的这11种,所以只要认真的掌握着11中就足够了。 那么是哪11种呢,下面是wiki上总结的11种 1 Simple sorts 1.1 Insertion sort(插入排序)... 阅读全文

posted @ 2014-04-10 01:33 狼牙灬月 阅读(385) 评论(0) 推荐(0)

[原]《Thinking In Algorithm》11.堆结构之二叉堆
摘要:之前有篇博客(操作系统中堆和栈的区别)讲的是操作系统中的堆,顺带提了下数据结构中的堆。觉得比较简单就没详细讲解,不过这几天看排序算法看到堆排序时,感觉对堆都不怎么熟悉,有些细节问题没注意到。所以说不要小看任何一个知识点。而且经过细看才发现堆其实有很多精妙之处,怪不得很多算法都靠它来实现,如堆排序,Dijkstra算法。 而且堆有许多变体,如二叉堆,二项堆,斐波那契堆。这... 阅读全文

posted @ 2014-04-08 10:52 狼牙灬月 阅读(183) 评论(0) 推荐(0)

[原]《面试题精选》09.不用for,while,if等关键字求1+2+...+n
摘要:题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。 分析:很显然,这道题的解法非常多,思路大家都知道, 对于解高斯数列和的问题,除了用公式外,无非就是用循环或者递归。但循环要用到for或者while,而递归肯定要用到判断语句,那么就会使用到if。 说到这大家肯定会认为唯一求解... 阅读全文

posted @ 2014-04-05 22:34 狼牙灬月 阅读(297) 评论(0) 推荐(0)

[原]java编程思想中总结的C++与java的区别
摘要:(1) 最大的障碍在于速度:解释过的Java要比C的执行速度慢上约20倍。无论什么都不能阻止Java语言进行编译。写作本书的时候,刚刚出现了一些准实时编译器,它们能显著加快速度。当然,我们完全有理由认为会出现适用于更多流行平台的纯固有编译器,但假若没有那些编译器,由于速度的限制,必须有些问题是Java不能解决的。 (2) 和C++一样,Java也提供了两种类型的注释。... 阅读全文

posted @ 2014-04-05 16:07 狼牙灬月 阅读(219) 评论(0) 推荐(0)

[原]操作系统中堆和栈的区别
摘要:我们都知道数据结构中也有堆栈的概念,但他们与操作系统中的不同。 栈(操作系统):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆则是存放在二级... 阅读全文

posted @ 2014-04-04 17:37 狼牙灬月 阅读(648) 评论(0) 推荐(0)

[原]Java/C++中数组的区别
摘要:1. 数组名区别 -------------------------------------- 1. java中不用说,本着一切皆对象的原则,所以java中的数组也是对象.那么数组类是哪个,当然不是java.util.Arrays.详见Java数组方法的思考 2. 而在c++中数组名其实是一种数据结构,有人会说不是指针吗,关于这一点见(C++中数组名其实是一种数据结构)... 阅读全文

posted @ 2014-04-04 16:11 狼牙灬月 阅读(217) 评论(0) 推荐(0)

[原]数据结构与对象的区别
摘要:《Clean Code》的总结: 总的说来数据结构指的就是数据的载体,暴露数据,而几乎没有有意义的行为,你应该在尖叫这不是贫血类?的确这和我们的贫血类很相似。最常见的应用在分布式服务,以wcf,webservice,reset之类的分布式服务中不可或缺的数据传输对象(DTO)模式,DTO(Request/Response)就是一个很典型的数据载体,只存在简单的get... 阅读全文

posted @ 2014-04-04 12:47 狼牙灬月 阅读(664) 评论(1) 推荐(0)

[原]《面试题精选》08.颠倒句子中单词的顺序
摘要:题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 分析:此题思路应该很清晰,算法上没什么,但是对String字符串的处理时面试中常见问题。遇到颠倒顺序的我们很容易就想到使用数据结构栈,首先我们... 阅读全文

posted @ 2014-04-04 09:55 狼牙灬月 阅读(202) 评论(0) 推荐(0)

[原]《程序员面试题精选》07.后序遍历结果判断其是否为二叉查找树
摘要:题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11 因此返回true。 如果输入7、4、... 阅读全文

posted @ 2014-04-03 21:54 狼牙灬月 阅读(190) 评论(0) 推荐(0)

[原]《程序员面试题精选》06.查找最小的k个元素
摘要:题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。 分析:首先我们会简单想到将所有元素都排序,然后取出最小的几个,但是当数据量大的时候呢,这种方法显然不行。那么我们就把范围缩小,我们的目的就是那最小的k个数,那么我们就用一个单独的容器来存储这k个数,然后当插入下一个数之前先判断一下插... 阅读全文

posted @ 2014-04-03 18:58 狼牙灬月 阅读(183) 评论(0) 推荐(0)

导航