100道算法题
文章平均质量分 54
xijiaoda_liuhao
这个作者很懒,什么都没留下…
展开
-
微软等数据结构+算法面试100题(49)-- 设计类
用C++设计两个类。 一个只能在栈中分配空间 一个只能在堆中分配。//HeapOnly.cpp #include using namespace std; class HeapOnly { public: HeapOnly() { cout << "constructor." << end原创 2012-11-12 10:37:03 · 393 阅读 · 0 评论 -
微软等数据结构+算法面试100题(8)--华为面试题
/*95.华为面试题1 判断一字符串是不是对称的,如:abccbaANSWERTwo cursors.2.用递归的方法判断整数组a[N]是不是升序排列*/bool IsSymmetry(char *str){ int i=0,j=strlen(str)-1; while(i<j) { if(str[i]!=str[j]) retur原创 2012-11-10 12:36:01 · 906 阅读 · 0 评论 -
微软等数据结构+算法面试100题(7)--编写strcpy 函数
/*96.08 年中兴校园招聘笔试题1.编写strcpy 函数已知strcpy 函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数strcpy*/char *StrCpy(char *strDest, co原创 2012-11-10 12:33:18 · 350 阅读 · 0 评论 -
微软等数据结构+算法面试100题(6)--写一个函数,检查字符是否是整数,如果是,返回其整数值
/*5.写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4 行代码编写出一个从字符串到长整形的函数?)ANSWERChar or string?have done atoi;*/int MyAtoi(char* str){ int res=0; for(int i=0;str[i]!='\0';i++) res=res*10+st原创 2012-11-10 12:31:48 · 669 阅读 · 0 评论 -
微软等数据结构+算法面试100题(40)-- 旋转数组中的最小元素
旋转数组中的最小元素。题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 /*上面说过左旋字符串有俩种情况。那么其实要找最小值也可以利用类似于二分查找的思想第一种:6,5,4,3,2,1,原创 2012-11-11 20:43:21 · 417 阅读 · 0 评论 -
微软等数据结构+算法面试100题(39)-- 左旋数组中查找
一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。 //递减数组左旋可以分为俩种情况。|| 表示分界处/*第一种:6,5,4,3,2,1,|| 9,8,7第二种:3,2,1,|| 9,8,7,6,5,4数组[low....high]。mid=low+(high-low)/原创 2012-11-11 20:41:50 · 528 阅读 · 0 评论 -
微软等数据结构+算法面试100题(38)-- 二叉树中任意两个节点间的最大距离
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。 /*1.求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。*/voi原创 2012-11-11 20:39:35 · 550 阅读 · 0 评论 -
微软等数据结构+算法面试100题(33)--用俩个栈实现队列
用俩个栈实现队列。题目:某队列的声明如下:template class CQueue{public:CQueue() {}~CQueue() {}void appendTail(const T& node); // append a element to tailvoid deleteHead(); // remove a element from headpr原创 2012-11-11 20:30:27 · 379 阅读 · 0 评论 -
微软等数据结构+算法面试100题(32)--从尾到头输出链表
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};分析:这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题中。 /*58.从尾到头输出链表。题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定原创 2012-11-11 20:28:40 · 323 阅读 · 0 评论 -
微软等数据结构+算法面试100题(31)--在O(1)时间内删除链表结点
60.在O(1)时间内删除链表结点。题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);分析:这是一原创 2012-11-11 20:26:45 · 668 阅读 · 0 评论 -
微软等数据结构+算法面试100题(29)--在字符串中删除特定的字符
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。 /*63.在字符串中删除特定的字符。题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”, 则删除原创 2012-11-11 20:22:38 · 419 阅读 · 0 评论 -
微软等数据结构+算法面试100题(10)--三道面试题
/*90.1.不开辟用于交换数据的临时空间,如何完成字符串的逆序(在技术一轮面试中,有些面试官会这样问)。ANSWERTwo cursors.2.删除串中指定的字符(做此题时,千万不要开辟新空间,否则面试官可能认为你不适合做嵌入式开发)ANSWERHave done this.3.判断单链表中是否存在环。ANSWERHave done thi原创 2012-11-10 12:40:41 · 358 阅读 · 0 评论 -
微软等数据结构+算法面试100题(13)--金山笔试题
/*88.2005 年11 月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。*/int MoveChar(char *str){ int len=strlen原创 2012-11-10 12:45:22 · 513 阅读 · 0 评论 -
微软等数据结构+算法面试100题(14)--实现strstr 功能
/*3.实现strstr 功能,即在父串中寻找子串首次出现的位置。(笔试中常让面试者实现标准库中的一些函数)*/int StrStr(char *str,char *substr){ int len=strlen(str); int sublen=strlen(substr); int i=0,j=0; int res=-1; while(i<len&&j<原创 2012-11-10 12:47:58 · 375 阅读 · 0 评论 -
微软等数据结构+算法面试100题(48)-- 微软十五道面试题
微软十五道面试题1、有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。2、写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)3、给出一个函数来输出一个字符串的所有排列。4、(a)请编写实现malloc()内存分配函数功能一样的代码。原创 2012-11-12 10:29:49 · 691 阅读 · 0 评论 -
微软等数据结构+算法面试100题(47)-- 微软三道面试题
微软三道面试题yeardoublehua1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法。2. 有2个数组..里面有N个整数。设计一个算法O(n log2(n)),看是否两个数组里存在一个同样的数。3. 让你排序N个比N^7小的数,要求的算法是O(n)(给了提示..说往N进制那方面想)原创 2012-11-12 10:25:13 · 1121 阅读 · 0 评论 -
微软等数据结构+算法面试100题(46)-- 查找最小的k 个元素
查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。这是比较有名的top k问题。求在一堆数中,这堆数要大于k。假设有n个。求出前最小的n的元素1.全排。将所有元素排序,找出前n个。复杂度n*logn。2.插入排序。需要k趟。复杂度是nk。3.堆排序原创 2012-11-12 10:23:14 · 639 阅读 · 0 评论 -
微软等数据结构+算法面试100题(44)-- 求子数组的最大和
求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。/*3.求子数组的最大和题目:原创 2012-11-12 10:19:08 · 482 阅读 · 0 评论 -
微软等数据结构+算法面试100题(43)-- 把二元查找树转变成排序的双向链表
把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10/ \6 14/ \ / \ 4 8 12 16转换成双向链表4=6=8=10=12=14=16。/*1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该原创 2012-11-12 10:16:42 · 355 阅读 · 0 评论 -
微软等数据结构+算法面试100题(42)-- 设计一个栈结构
设计一个栈结构,满足一下条件:min,push,pop 操作的时间复杂度为O(1)。/*40.百度研发笔试题引用自:zp1553348771)设计一个栈结构,满足一下条件:min,push,pop 操作的时间复杂度为O(1)。*/class MinStack{private: stack minst; stack st;public: void push(int原创 2012-11-12 10:15:22 · 1465 阅读 · 0 评论 -
微软等数据结构+算法面试100题(41)-- 二叉树的前序遍历
二叉树的前序遍历/*43.递归和非递归俩种方法实现二叉树的前序遍历。*/void PreOrderTraverse(TreeNode *root){ if(root==NULL) return; coutdata<<" "; PreOrderTraverse(root->left); PreOrderTraverse(root->right);}/*树的前序遍历属于原创 2012-11-12 10:14:07 · 416 阅读 · 0 评论 -
微软等数据结构+算法面试100题(45)-- 在二元树中找出和为某一值的所有路径
在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树10/ \ 5 12 / \ 4 7则打印出两条路径:10, 12 和10, 5, 7。typedef vector::iterator T原创 2012-11-12 10:20:40 · 437 阅读 · 0 评论 -
微软等数据结构+算法面试100题(20)--二叉树公共父节点
题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。 分析:求数中两个结点的最低共同结点是面试中经常出现的一个问题。这个问题至少有两个变种。 第原创 2012-11-10 13:13:49 · 646 阅读 · 0 评论 -
微软等数据结构+算法面试100题(16)--查找子串
/*2.已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde 的个数,如果没有返回0,有的话返回子字符串的个数。*/int GetSubStrTimes(char *str,char *substr){ int count=0; int i=0,j=0; int len=strlen(str),sublen=strlen(substr); whi原创 2012-11-10 12:51:11 · 366 阅读 · 0 评论 -
微软等数据结构+算法面试100题(28)--丑数
题目:我们把只包含因子2、3 和5 的数称作丑数(Ugly Number)。例如6、8 都是丑数,但14 不是,因为它包含因子7。习惯上我们把1 当做是第一个丑数。求按从小到大的顺序的第1500 个丑数。 //判断一个数是不是丑数bool IsUglyNum(int n){ while(n%2==0) n=n/2; while(n%3==0) n=n/3;原创 2012-11-11 20:20:54 · 465 阅读 · 0 评论 -
微软等数据结构+算法面试100题(27)--颠倒栈
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。 /*66.颠倒栈。题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。*/void InsertStack(stack &st,int v原创 2012-11-11 16:05:40 · 531 阅读 · 0 评论 -
微软等数据结构+算法面试100题(18)--百度面试题
/*2010 年3 道百度面试题[相信,你懂其中的含金量]1.a~z 包括大小写与0~9 组成的N 个数, 用最快的方式把其中重复的元素挑出来。*/void RepeatChars(char *str){ int tmp[256]; memset(tmp,0,sizeof(tmp)); for(int i=0;str[i]!='\0';i++) tmp[str原创 2012-11-10 12:54:52 · 505 阅读 · 0 评论 -
微软等数据结构+算法面试100题(17)--复制两个字符串A 和B
/*1.给出一个函数来复制两个字符串A 和B。字符串A 的后几个字节和字符串B 的前几个字节重叠。分析:记住,这种题目往往就是考你对边界的考虑情况。*/int GetSameIndex(char* str,char* substr){ int i=0,j=0; int len=strlen(str),sublen=strlen(substr); while(i<原创 2012-11-10 12:52:57 · 618 阅读 · 0 评论 -
微软等数据结构+算法面试100题(15)--求最大连续递增数字串
/*2.求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)*/void GetMaxIncreNum(char *str){ int max=numeric_limits::min(); int count=0; int start=-1,end=-1; int len=strlen(str); int ma原创 2012-11-10 12:49:50 · 462 阅读 · 0 评论 -
微软等数据结构+算法面试100题(12)--快速排序
/*3.快速排序(东软喜欢考类似的算法填空题,又如堆排序的算法等)*/int Parition(int *p,int low,int high){ int pivotkey=p[low]; while(low<high) { while((low=pivotkey))//这里相等不能丢掉 high--; p[low]=p[high]; whil原创 2012-11-10 12:43:14 · 335 阅读 · 0 评论 -
微软等数据结构+算法面试100题(11)--压缩字符串
/*4.删除字符串中的数字并压缩字符串。如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。(下面的算法只需要一次遍历,不需要开辟新空间,时间复杂度为O(N))*/void DeleteNumChars(char* str){ int slow=0,fast=0,len=strlen(str); while(fast<=len) {原创 2012-11-10 12:41:53 · 333 阅读 · 0 评论 -
微软等数据结构+算法面试100题(9)--在一个int 数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
/*93.在一个int 数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。*/void GetMidNum(int *p,int len){ int *b=new int[len]; b[len-1]=numeric_limits::max(); for(int i=len-2;i>=0;i--) { if(p[i+1]<b[i+1]) b原创 2012-11-10 12:38:31 · 798 阅读 · 0 评论 -
微软等数据结构+算法面试100题(5)--怎样编写一个程序,把一个有序整数数组放到二叉树中
4.怎样编写一个程序,把一个有序整数数组放到二叉树中/*4.怎样编写一个程序,把一个有序整数数组放到二叉树中?*/void MakeTree(TreeNode* &root,int *p,int low,int high){ if(low>high) { root=NULL; return; } if(low==high) { root=n原创 2012-11-09 21:29:44 · 702 阅读 · 0 评论 -
微软等数据结构+算法面试100题(3)--怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?
怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)/*6.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?*/ListNode* ReverseList(ListNode* head){ if(head==NULL) return NULL; if(head->next==NULL) return head; Li原创 2012-11-09 20:26:44 · 1899 阅读 · 2 评论 -
微软等数据结构+算法面试100题(4)--怎样从顶部开始逐层打印二叉树结点数据?请编程
怎样从顶部开始逐层打印二叉树结点数据?请编程void LevelOrderTraverse(TreeNode* root){ if(root==NULL) return; queue qu; qu.push(root); while(!qu.empty()) { root=qu.front(); if(root->left!=NULL) qu.原创 2012-11-09 21:06:02 · 1083 阅读 · 0 评论 -
微软等数据结构+算法面试100题(2)--给出一个函数来输出一个字符串的所有排列
1.给出一个函数来输出一个字符串的所有排列。/*1.给出一个函数来输出一个字符串的所有排列。*/void StrArrange(char* str,int low,int high){ if(low>high) return; if(low==high) cout<<str<<endl; for(int i=low;i<=high;i++) {原创 2012-11-09 19:43:15 · 603 阅读 · 0 评论 -
微软等数据结构+算法面试100题(22)--几道算数题
比较有意思的几个题:1.题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。2.不用四则运算计算俩个数的积。3.计算一个数化为二进制中含有1的个数。4.对一个32位的数循环右移,返回结果。/*1.不用四则运算计算俩个数的和。比如是如何得出5+17=22这个结果的。实际上,我们可以分成三步的:第一步只做各位相加不进位,此时相加的结果是12原创 2012-11-11 15:54:04 · 733 阅读 · 0 评论 -
微软等数据结构+算法面试100题(30)--只出现一次的数字
找出数组中两个只出现一次的数字题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。 /*61.找出数组中两个只出现一次的数字题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。*///从低位开始找1.int BitOneMin(int res){ if(res==0) return 0; int count=0; while原创 2012-11-11 20:24:38 · 342 阅读 · 0 评论 -
微软等数据结构+算法面试100题(34)-- 类CMyString
题目:类CMyString 的声明如下:class CMyString{public:CMyString(char* pData = NULL);CMyString(const CMyString& str);~CMyString(void);CMyString& operator = (const CMyString& str);private:char* m原创 2012-11-11 20:31:53 · 443 阅读 · 0 评论 -
微软等数据结构+算法面试100题(26)--数值的整数次方
/*71.数值的整数次方。题目:实现函数double Power(double base, int exponent),求base 的exponent 次方。*//*例如要计算2^5;n是次方数,res是返回值。tmp中间变量n res tmp6 1 23 1 2^21原创 2012-11-11 16:04:12 · 462 阅读 · 0 评论