摘要:2014.10.26~2014.11.26 历时一个月,微软面试100题系列结束,其中有部分题重复和部分题是智力题,省略掉。 下一个系列:《编程之美》
阅读全文
摘要:题目要求 求随机数构成的数组中长度大于等于3的最长的等差数列,输出等差数列由小到大,如果没有符合条件的就输出。 例如输入{1,3,0,5,-1,6} 输出{-1,1,3,5}代码实现#include#include#includeusing namespace std;void clear(s...
阅读全文
摘要:结构#define MAXLEN 100typedef struct HP{ int len; int data[MAXLEN];}HP; len表示十进制数有多少位,data[0]为符号位,data[1]为个位,data[2]为十位,以此类推。大整数的加法#include #defi...
阅读全文
摘要:题目要求 怎样编写一个程序,把一个有序整数数组放到二叉树中?题目分析 二叉搜索树:左#include using namespace std;typedef struct BinaryTree{ struct BinaryTree *left,*right; int data;}Bi...
阅读全文
摘要:叫你卖萌 皇上说:“紫薇,你有什么苦,今日都跟朕讲讲吧!是谁打了你?” 紫薇抽噎着说:“回皇上的话,嬷,嬷嬷打……” 在一旁不安了好久的皇后再也忍不住,冲上前甩了紫薇一巴掌说:“告状就告状,你卖什么萌?”
阅读全文
摘要:题目要求 已知一个字符串,比如adserwsde,寻找其中的一个子字符串比如sde的个数,如果没有就返回0,有的话返回子字符串的个数。题目分析 对KMP算法稍加修改一下就行:在应该返回字符串的地方进行计数。代码实现#include #include void compute_prefix(int...
阅读全文
摘要:昨天在食堂吃饭遇见了仰慕已久的女神,我端着饭过去对女神说你吃红烧肉吗?他说不吃,于是我把她碗里的肉都夹到我碗里。今天又碰到她,我过去说你吃土豆么,女神一听赶紧说吃。于是我把我碗里的土豆夹到她碗里,把她碗里的红烧肉夹到我碗里。
阅读全文
摘要:题目要求 1.a~z包括大小写与0~9组成的N个数,用最快的方式把其中重复的元素挑出来; 2.已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要求你构造一个发生器,使得它构造0和1的概率均为1/2;构造一个发生器,使得它构造1、2、3的概率均为1/3;...构造一个发生器,使得它构...
阅读全文
摘要:题目要求 1.strcpy/memcpy/memmove; 2.memset函数; 3.字符串处理函数。题目分析 1.接口定义: char * strcpy(char * dest, const char * src); void *memcpy(void *memTo, c...
阅读全文
摘要:写在开头 以下是结合自己一年的学习经历,给正在准备求职的朋友的一些分享,实用与否,仁者见仁智者见智,只希望能给正在迷茫和徘徊的朋友一些正能量。关于自己 从开始转方向学软件,我一直坚持两点:1)基础很重要 2)心态很重要。 关于基础,我主要从两方面入手:语言、数据结构和算法。语言要会用还要知...
阅读全文
摘要:她睁开眼,昨夜的醉意已经褪去。 床是自己的,家是自己的。 陌生男人已经穿好衣服正要开门而去。 她突然有些忧伤,即脱口而出:程先生,我还不知道你的名字呢。 男人回头,温柔笑道:就叫我旭元吧…
阅读全文
摘要:有个哥们跟我说,等他闭门修炼成为学霸了再来见我。我听了心里一紧,这TM是要跟我绝交啊!
阅读全文
摘要:以下所有书籍下载链接:http://pan.baidu.com/s/1dDu4Epb2014.11.3~2014.11.5 《一个程序员的奋斗史》2014.11.5~2014.11.7 《别闹了,费曼先生》2014.11.17~2014.11.20 《天才在左,疯子在右》...
阅读全文
摘要:题目要求: 问题1:在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。 问题2:一个文件,内含一千万行字符串,每个字符串在1k以内,要求找出所有相反的串对,如abc和cba。 问题3:STL的set用什么实现的?为什么不用hash?题目分析: 问题1分析: 假设...
阅读全文
摘要:题目要求: 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列的方式有多少种?问题分析:
阅读全文
摘要:题目要求: 问题1:编写实现链表排序的一种算法。 问题2:编写实现数组排序的一种算法。 问题3:编写能直接实现strstr()功能的代码。问题分析: 问题1分析: 方法1 首先想到的是冒泡排序,因为简单; 方法2 如果内存空间允许,可以通过一个数组来辅助排序,时间复杂度O(Nlo...
阅读全文
摘要:题目要求: 链表和数组的区别在哪里?题目分析: 数组静态分配内存,链表动态分配内存; 数组预先定义长度,链表预先无需管理长度; 数组在内存中连续,链表可能连续; 数组元素在栈区,链表元素在堆区; 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n); 数组插入或删...
阅读全文
摘要:题目要求: 1.给定一个单链表,检测是否有环; 2.判断两个无环单链表是否有交点; 3.给定两个单链表,检测两个链表是否有交点; 4.给定单链表,如果有环的话请返回从头结点进入环的第一个结点; 5.只给定单链表中某个结点p(并非最后一个结点,即p->next!=NULL)指针,删除该结点;...
阅读全文
摘要:题目要求: 一个复杂链表,其结点除了有一个m_pNext指针指向想一个结点外,还有一个m_pSibling指向链表中的任一结点或NULL,其结点的C++定义为: typedef struct ComplexNode{ int m_nValue; ComplexNode *m_pNext...
阅读全文
摘要:题目要求: 输入二叉树中的两个结点,输出这两个及诶单在数中最低的共同父结点。题目分析: 还有一种情况:如果输入的两个结点中有一个或两个结点不在二叉树中,则输出没有共同父结点; 因此,可以在程序中定义一个flag=0,找到一个点之后flag就加1,最后判断的时候,如果flag=2,则说明在二叉树...
阅读全文
摘要:问题要求: 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 参考资料:编程之美2.3 寻找发帖水王问题分析: 方法1 对数组排序,然后顺次查找其中最多的; 方法2 对数组排序,最中间一个肯定为要找的数字,时间复杂度O(NlogN); 方法3 每次消去数组中两个不同的数,最后...
阅读全文
摘要:题目要求: 输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串"google",由于该字符串里最长的对称子字符串"goog",因此输出4.题目分析: 代码实现: #include int LongestPalindrome(const char *s, int n);int...
阅读全文
摘要:题目要求: 实现C++单例模式,即只能生成一个实例的类。题目分析: 1.一般情况:用构造函数私有化和静态函数实现。 2.如果考虑内存泄露:用智能指针+一般情况方法。 3.如果考虑线程安全:加锁。代码实现: //一般情况#include #include #include using nam...
阅读全文
摘要:题目要求: 实现函数double Power(double base,int exponent),求base的exponent次方。 不得使用库函数,不需要考虑溢出。 参考资料:剑指offer第11题。题目分析: 考虑情况: 1.底数为0,指数为非负; 2.底数为0,指数为负; ...
阅读全文
摘要:题目要求: 把一个不降序数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 参考资料:剑指offer第8题。题目分析: 情况1...
阅读全文
摘要:题目要求: 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。 例如输入数组{32,321},则输出这两个能排成的最小数字32132. 请给出解决问题的算法,并证明该算法。 参考资料:剑指offer第33题。 链接:http://zhedahht.blog.1...
阅读全文
摘要:题目要求: 1.扑克牌的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。 参考资料:剑指offer第44题。 2.骰子游戏 n个骰子的点数。把n个骰子扔在地上,所有骰子...
阅读全文
摘要:题目要求: 用递归颠倒一个栈。 例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶。题目分析: 令函数申明为:void ReverseStack(stack oldStack);代码实现:#include #include using namespac...
阅读全文
摘要:题目要求: 输入数字n,按顺序输出从1到最大的n位10进制数。 例如,输入3,则输出1、2、3...、999(最大的3位数)。 参考资料:剑指offer第12题。题目分析: 如果我们在数字前面补0的话,就会发现n位所有十进制数其实就是n个从0到9的全排列。也就是说,我们把数字的每一位都从0到...
阅读全文
摘要:题目要求: 我们把只包含因子2、3和5的数称为丑数。例如6、8都是丑数,但是14不是,因为它包含因子7. 习惯上我们把1当作是第一个丑数。 求按从小到大的顺序的第1500个丑数。 参考资料:剑指offer34题。题目分析: 方法1 从1开始逐个遍历整数,每个整数如果包含2、3和5中的任何一...
阅读全文
摘要:题目要求: 输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符。例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成了"Thy r stdnts.".题目分析: 1. 把第二个字符串的所有字符都存入一个set中; 2. 遍历第一个字符串的每...
阅读全文
摘要:题目要求: 两个无环单向链表,找出它们的第一个公共结点。 参考资料:剑指offer第37题。题目分析: 代码实现: #include using namespace std;typedef struct ListNode{ struct ListNode *next; int d...
阅读全文
摘要:题目要求: 一个整型数组里除了两个数字机之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度O(N).空间复杂度O(1). 参考资料:剑指offer第40题。题目分析: 已知: 1.两个相同的数字异或的结果为0,即a^a = 0. 2.两个不相同的数...
阅读全文
摘要:题目要求: 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。 参考资料:剑指offer第13题。题目分析: 有几种情况: 1.删除的结点是头结点,且链表不止一个结点; 2.删除的结点是头结点,且链表只有一个结点; 3.删除的结点是尾结点,且链表不止一个结点; ...
阅读全文
摘要:题目要求: 用C++设计一个不能被继承的类。 参考资料:剑指offer第48题。题目分析: 方法1:把构造函数设为私有函数,定义共有的静态函数来创建和释放类的实例; 方法2:利用虚拟继承和友元;代码实现: //把构造函数设为私有函数,定义共有的静态函数来创建和释放类的实例class Tem...
阅读全文
摘要:题目要求: 输入一个链表的头结点,从尾到头反过来输出每个结点的值。 参考资料:剑指offer第5题。题目分析: 可以用栈或者递归。 栈把链表结点从头到尾依次存储,这样最终栈顶就是链表尾部。 递归,对于当前结点,可以用递归输出当前结点之后的结点,再输出当前结点。代码实现: #include...
阅读全文
摘要:题目要求: 某队列的声明如下: template class CQueue { public: CQueue() {} ~CQueue() {} void appendTail(const T& node); // append a element to tail ...
阅读全文
摘要:题目要求: 如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串中,则字符串一称为字符串二的子串。 注意,并不是要求子串(字符串一)的字符必须连续出现在字符串二中。 请编写一个函数,输入两个字符串,求它们的最长公共子序列,并打印出最长公共序列。 例如:输入两个字符串BDCABA和A...
阅读全文
摘要:题目要求: 类CMyString的声明如下:class CMyString{public: CMyString(char *pData=NULL); CMyString(const CMyString &str); ~CMyString(void); CMyString &...
阅读全文
摘要:题目要求: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 要求时间复杂度为O(n). 参考资料:剑指offer第14题。题目分析: 使用两个指针,pBegin和pEnd,pBegin从开头往后遍历,pEnd从结尾往前遍历,当pBegin...
阅读全文
摘要:题目要求: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、cba。 参考资料:剑指offer第28题。题目分析: 1. 输出的字符串必须包含原字符串的所有字符,只是字符顺序换了; ...
阅读全文
摘要:题目要求: 输入一颗二叉树的根结点,求该树的深度。 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 如 3 / \ 4 \ 2,深度为3 参考链接:剑指offer第39题。题目分析: 用递归的方式从根结点开始,遍历其...
阅读全文
摘要:题目要求: 输入一个正数n,输出所有和为n连续正数序列(至少两个)。 例如输入15,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15.所以输出3个连续序列1~5,4~6,7~8. 参考资料:剑指offer第41题。题目分析: 由题意可知:从1~n中找连续的整数序列。 可以用两个...
阅读全文
摘要:题目要求: 如何对n个数进行排序,要求时间复杂度O(N).空间复杂度为O(1).题目分析: 严格的说,这道题给出的条件不全。如果这n个数字的大小跨度很大(1~无穷大),则肯定达不到要求。 如果n个数字的大小在一定范围内(如0~65535),则可以用hash表的方法。定义为int hash[65...
阅读全文
摘要:题目要求: 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1,}左移两位形成的,在这种数组中查找某个数。题目分析: 方法1 逐个查找,遍历一遍数组,时间复杂度O(N). 方法2 二分查找,时间复杂度O(logN).具体分析见下图:代码实现:#...
阅读全文
摘要:题目要求: 求一个数组的最长递减子序列; 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。代码实现:代码1:动态规划,时间复杂度O(N^2).#include using namespace std;const int N = 8;int Lis(int a[],...
阅读全文
摘要:题目要求: 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())题目分析: 之前左括号的数量必须比右括号多,即卡特兰数, 令h(0)=1,h(1)=1,catalan数满足递推式, h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1...
阅读全文
摘要:题目要求: 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出以正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。题目分析: 使用贪心算法。代码实现: #include using namespace std;const int N =...
阅读全文
摘要:题目要求: 设计一个魔方(六面)的程序。题目分析: 把魔方从正面看展开成一个平面,如图1所示。设计一个类,其中Spacexy[SPACE][LEN][LEN];中的SPACE为0~5表示六个面,每个数字代表哪一面见图1.LEN为0~2,[LEN][LEN]表示某个面的3*3的9个格子。 类中的...
阅读全文
摘要:题目要求: 实现二叉搜索树的前序、中序、后序非递归遍历。题目分析: 非递归前序遍历:使用一个辅助栈,出栈一个结点并输出该结点,同时依次入栈该结点的右结点和左结点,再出栈,入栈...; 非递归中序遍历:使用一个辅助栈和一个临时结点,临时结点不断找树的左子树,知道为空,然后又跳到空结点父结点的右子...
阅读全文
摘要:题目要求: 两个非降序链表的并集,1->2->3和2->3->5合并为1->2->3->5. 另外只能输出结果,不能修改两个链表的数据。题目分析: 1.不能修改原链表数据:即,输出1->2->3->5后,原来的两个链表还是1->2->3和2->3->5。因此输出的这些结点都需要重新申请空间存放...
阅读全文
摘要:题目要求: 一串首尾相连的珠子(m个),有N种颜色(N=nLen) Break;}
阅读全文
摘要:题目要求: 求一个有向连通图的割点。割点的定义是,如果除去此结点和与其相关的边,有向图不再连通,描述算法。题目分析: 判断某个点是否是割点的方法是,删除该点和与其相关的边,然后求连通性;这样逐个删除点(每次有且只删除一个点),就可以判断该图的割点有哪些了。 判断图连通性的方法:从一个点出发,如...
阅读全文
摘要:第一题: 用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,用x次天平,最多可以从y个小球中找出较轻的那个,求y与x的关系式。分析: y = 3^x. 例如:Y= 9. 先分成3堆abc,每堆3个小球; 第一次称找出在abc中哪一堆:称a和b,如果天平不倾斜,...
阅读全文