
面试题
文章平均质量分 76
insistGoGo
这个作者很懒,什么都没留下…
展开
-
高质量C++编程_C++/C试题
一、请填写BOOL, float,指针变量 与“零值”比较的if语句请写出 BOOLflag与“零值”比较的if语句:if (flag){ }if (!flag){ }请写出 float x 与“零值”比较的 if 语句:const float EPSINON = 0.00001;if (x >= -EPSINON && x <=EPSINON){ }原创 2013-06-20 17:31:15 · 2700 阅读 · 1 评论 -
每日一题(9) - 判断单链表是否有环
题目来自剑指Offer题目分析代码bool IsCycle(ListNode* pHead){ assert(pHead != NULL); ListNode* pFast = pHead; ListNode* pSlow = pHead; while (pFast->m_pNext && pFast->m_pNext->m_pNext) { pFa原创 2013-06-22 11:16:42 · 952 阅读 · 0 评论 -
每日一题(11) - 统计有环单链表的环中结点个数
题目来自编程之美题目:统计有环单链表的环中结点个数思路:参考单链表面试题代码/*思路:在快慢指针相遇位置肯定是在环中,此时一个指针不动,让另一个指针转圈,再次相遇时经过的结点个数就是环中结点个数*/int GetCountOfCycle(ListNode* pHead){ assert(pHead != NULL); ListNode* pFast = pHead;原创 2013-06-22 15:51:43 · 1192 阅读 · 0 评论 -
每日一题(13) - 判断两个无环链表是否相交
题目来自编程之美思路:判断两个单链表最后一个元素是否相等,具体参考单链表面试题代码/*思路:判断两个单链表最后一个元素是否相等*/bool IsCrossing(ListNode* pFirstHead,ListNode* pSecHead){ assert(pFirstHead != NULL && pSecHead); ListNode* pCurOfFirst = pFi原创 2013-06-22 18:43:46 · 1404 阅读 · 0 评论 -
每日一题(14) - 判断两个无环相交的两个链表的交点
题目来自编程之美题目:判断两个无环相交的两个链表的交点思路:使用类似指针追赶的方法得到,具体见单链表面试题代码ListNode* FindCrossingNode(ListNode* pFirstHead,ListNode* pSecHead){ assert(pFirstHead != NULL && pSecHead); int nLenOfFirst = 0; i原创 2013-06-22 19:10:44 · 1001 阅读 · 0 评论 -
每日一题(10) - 判断有环单链表的环入口
题目来自编程之美题目:如何找到环的入口?分析:参考单链表面试题代码:/*在快慢指针相遇处,使用两个指针分别从头结点和碰撞处开始走,相遇点就是环入口点*/ListNode* FindCycleEntry(ListNode* pHead){ assert(pHead != NULL); ListNode* pFast = pHead; ListNode* pSlow = pH原创 2013-06-22 15:38:17 · 871 阅读 · 0 评论 -
每日一题(12) - 判断有环单链表的链表长度
题目来自编程之美题目: 判断有环单链表的链表长度思路: 统计第一个结点到碰撞点之间结点个数 + 统计环中结点个数,具体见单链表面试题代码/*思路:统计第一个结点到碰撞点之间结点个数 + 统计环中结点个数1、先找到碰撞点2、利用碰撞点,找到环入口点,同时统计第一个结点到碰撞点之间结点个数3、利用碰撞点或者环入口点,在环中转圈,统计环中结点个数*/int GetNode原创 2013-06-22 16:28:12 · 1271 阅读 · 1 评论 -
每日一题(28) - 找出绝对值最小的元素
题目来自网上题目:给出一个递增数组,找出绝对值最小的元素思路:在数组中二分找0代码:#include #include using namespace std;int BinSearch(int nArr[],int nStart,int nEnd){ assert(nArr != NULL && nStart >= 0 && nEnd >= nStart); int原创 2013-07-10 11:35:28 · 1021 阅读 · 0 评论 -
每日一题(27) - 旋转数组的最小数字
题目来自剑指offer题目:思路:根据指针low,mid,high三个指针指向元素的大小确定二分往左走还是往右走如果arr[low] 如果arr[low] > arr[mid]: 则区间[low,mid]的元素是有递增有递减,则应该往左走终止条件:区间只剩两个元素时,终止。此时该区间肯定值一个大一个小(high指向),此时返回high指向元素即可注意:有一原创 2013-07-10 11:12:19 · 795 阅读 · 0 评论 -
每日一题(30)- 斐波那契数列以及应用
题目来自剑指offer题目:说明:形成的斐波那契数列为:0,1,2,3,5,8...思路:可以直接使用递归,但是有重复子问题。可以使用迭代。递归代码:long Fibonacci(unsigned int n){ if (n == 1) { return 1; } if (n == 2) { return 2; } return Fibo原创 2013-07-10 20:25:30 · 1713 阅读 · 0 评论 -
每日一题(15) - 如何知道两个单链表(可能有环)是否相交
题目来自编程之美题目:如何知道两个单链表(可能有环)是否相交分析:根据两个链表是否有环来分别处理,具体参考单链表面试题1、如果两个链表都没有环。可直接根据两个链表最后一个元素是否相等确定是否有环。2、一个有环,一个没环。肯定不相交3、两个都有环。(注,两个有环链表相交是指这个环属于两个链表共有)这里重点求第三种情况:即判定两个都有环的链表是否相交。思路:在链表A中找到环原创 2013-06-22 20:55:59 · 1005 阅读 · 0 评论 -
每日一题(26) - 数组元素重排
题目来自网上题目:给定一个数组arr,其中包括0元素和非0元素,要求对数组元素进行重新排序要求:1、所有0元素在左,所有非零元素在后,且非零元素在重排前后相对位置不变2、时间复杂度为O(n),空间复杂度O(1)举例:原始数据:0、1、2、0、3输出数据:0、0、1、2、3思路:不能像快排一样移动,那样元素顺序会打乱。为了防止数据被打乱,可以从右端开始处理代码原创 2013-07-09 21:45:15 · 1125 阅读 · 0 评论 -
每日一题(7) - 合并两个有序链表
题目来自剑指Offer题目代码#include #include using namespace std;struct ListNode{ int m_Data; ListNode* m_pNext;};/*增+增 = 增,合并链表时要使用原链表空间*/ListNode* Merge(ListNode* pFirstHead,ListNode* pSe原创 2013-06-22 09:21:43 · 954 阅读 · 0 评论 -
每日一题(24) - 快速寻找满足条件的两个数
题目来自编程之美题目:给出一个有序数组和一个数字(定值),寻找和为定值的两个数要求:时间复杂度是O(n),空间复杂度为O(1)思想:代码:#include #include using namespace std;void Find(int nArr[],int nLen,int nSum){ assert(nArr != NULL && nLen > 0);原创 2013-07-05 16:05:33 · 1415 阅读 · 0 评论 -
每日一题(16) - 如何得到两个带环且相交的单链表的交点
题目来自编程之美题目:如何得到两个带环且相交的单链表的交点分析:具体参考单链表面试题情况1:相交的点,在环外思路:使用指针追赶的方法。1、求两个链表A和B的长度Length(A)和Length(B)2、如果Length(A)> Length(B),则链表A指针先走 Length(A)- Length(B),链表B指针再开始走,则两个指针相遇的位置就是相交的第一个节原创 2013-06-24 19:47:40 · 2079 阅读 · 0 评论 -
每日一题(25) - 使数组中的奇数在前偶数在后
题目来自网上题目:已知一个整数数组,写一个程序使其中的奇数在前偶数在后。思路:类似快速排序的一次划分。代码:void Divide(int nArr[],int nStart,int nEnd){ assert(nArr != NULL && nStart >= 0 && nEnd >= nStart); int tmp = 0; while (nStart < nEnd)原创 2013-07-08 19:46:05 · 1112 阅读 · 0 评论 -
每日一题(8) - 求链表的中间结点
题目来自剑指Offer题目分析代码ListNode* FindMidNode(ListNode* pHead){ assert(pHead != NULL); ListNode* pFast = pHead; ListNode* pSlow = pHead; while (pFast->m_pNext && pFast->m_pNext->m_pNext)原创 2013-06-22 10:51:08 · 990 阅读 · 0 评论 -
每日一题(32) - 顺时针打印矩阵 和 螺旋矩阵
题目来自剑指offer题目:思路:每次打印一个环根据上图,打印环时,可以分为四步:(1)打印1,只要环存在,就该行就可以打印。(2)打印2,只要环有多行(有待打印的元素)时,才可以打印。(3)打印3、当环有多行(和其一次行区分开)+有多列(有待打印的元素)时,才有可能打印该行(4)打印4、当环有多列(和其一次列区分开)+有多行(有待打印的元素)时原创 2013-07-12 10:44:41 · 1102 阅读 · 0 评论 -
每日一题(31) - 二叉树的镜像
题目来自剑指offer题目:举例:思想:先序遍历二叉树,每遍历一个结点时,都交换两个子树。代码:void MirrorRecursive(BinaryTreeNode* pRoot){ if (NULL == pRoot || (NULL == pRoot->m_pLeft && NULL == pRoot->m_pRight)) { return原创 2013-07-11 20:15:24 · 1062 阅读 · 0 评论 -
分析搜索引擎如何判断网页是否重复
搜索引擎判断重复性网页一般都基于一个思想:为每个网页计算出一组“DNA”,若两个网页有一定数量相同的DNA段,则认为这两个网页的内容重叠性很高,也就是说两个网页内容是相同的。每个搜索引擎判断重复性内容的方法都不太一样,主要是以下两点的不同:1、计算信息指纹算法;2、判断信息指纹的相似程度的参数。在描述具体的算法前,先说清楚两点:1、什么是信息指纹?信息指纹就是把网页里面正文转载 2013-07-11 23:02:58 · 1873 阅读 · 0 评论 -
每日一题(33) - 树的子结构
题目来自剑指offer题目:举例:思路:以先序的顺序对树进行处理,先比较子树的根值是否匹配,之后再比较其两个子树是否匹配代码:#include #include using namespace std;struct BinaryTreeNode{ char m_nValue; BinaryTreeNode* m_pLeft; BinaryTr原创 2013-07-13 11:15:18 · 2872 阅读 · 1 评论 -
每日一题(1) - 二维数组中的查找
题目来自剑指offer题目举例分析代码#include using namespace std;const int MAXLEN = 10;/*arr[x][y]比num大,删除本列;arr[x][y]比num小,删除本行*/bool Find(int arr[MAXLEN][MAXLEN],int num,int x,int y,int n原创 2013-06-20 16:08:26 · 1270 阅读 · 0 评论 -
每日一题(3) - 从尾到头打印链表
题目来自剑指Offer题目代码#include #include using namespace std;struct LinkNode { int m_Data; struct LinkNode* m_pNext;};void CreateList(LinkNode** pHead,int nLen)//头指针使用指针的指针{ assert(*pHead原创 2013-06-21 16:50:34 · 885 阅读 · 0 评论 -
每日一题(4) - 反转链表
题目来自剑指Offer题目代码#include #include using namespace std;struct LinkNode { int m_Data; struct LinkNode* m_pNext;};void ReverseList(LinkNode* pHead){ assert(pHead != NULL); LinkNode* p原创 2013-06-21 20:05:41 · 887 阅读 · 0 评论 -
每日一题(2) - 替换空格
题目来自剑指Offer题目思路:从后往前替换,减少数据移动次数,时间复杂度为O(n)代码:#include #include using namespace std;/*假设替换后,原数组仍然可以放下,数组strArr:存储待处理字符串,length:存储数组长度*/void RaplaceBlank(char strArr[],int length){ as原创 2013-06-21 16:23:14 · 1001 阅读 · 0 评论 -
每日一题(5) - 在O(1)时间删除链表结点
题目来自剑指Offer题目代码#include #include using namespace std;struct ListNode { int m_Data; struct ListNode* m_pNext;};void PrintList(ListNode* pHead);/**pListHead指向第一个结点pToDeleted指向要删除的结点原创 2013-06-21 20:55:07 · 961 阅读 · 0 评论 -
每日一题(6) - 链表中倒数第 k 个结点
题目来自剑指Offer题目代码#include #include using namespace std;struct ListNode{ int m_Data; ListNode* m_pNext;};/*注意初始化时,快指针应指向第k个结点,慢指针指向第1个结点。*/ListNode* FindKthToTail(ListNode* pListHe原创 2013-06-22 08:42:34 · 918 阅读 · 0 评论 -
每日一题(34) - 包含最小值Min函数的栈
题目来自剑指offer题目思路:除了栈的基本结构以外,另外维护一个数组保存最小值代码#include #include using namespace std;class Stack{public: Stack(); int Pop(); void Push(int nData); int Min();private: int m_nTop; in原创 2013-07-14 17:28:48 · 1073 阅读 · 0 评论 -
每日一题(35) - 栈的压入、弹出序列(验证出栈序列是否合法)
代码#include #include using namespace std;bool IsPopOrder(int nArrPop[],int nArrPush[],int nLen){ assert(nArrPop && nArrPush && nLen > 0); int* Stack = new int[nLen]; int nTop = -1; int nCurP原创 2013-07-14 21:53:19 · 1516 阅读 · 0 评论 -
每日一题(18) - 寻找发帖水王
题目来自编程之美题目 1:给出一个ID数组,其中每个ID都可能重复出现,其中一个ID的重复出现个数超过了数组长度的一半。则要求找出这个水王ID,要求时间和空间代价最小分析:具体见点击打开链接代码#include #include #include using namespace std;/*前提:在nArr数组中,有一个数字出现的个数大于数组长度的一半以上。函数最后原创 2013-06-27 20:17:13 · 1201 阅读 · 0 评论 -
每日一题(19) - 快速找出机器故障
题目来自编程之美题目 1:假设一个机器只存储一个标号为ID的记录,假设每份数据保存2个备份,这样就有2个机器存储了相同的数据。其中ID是小于10亿的整数,在某个时间,如果得到一个数据文件ID的列表。是否能够快速的找到这个表中仅出现一次的ID?即快速找出出现故障的机器存储的数据ID。分析:具体参考点击打开链接代码#include #include using namespac原创 2013-06-28 20:39:46 · 1277 阅读 · 0 评论 -
每日一练(41) - 二叉搜索树的后序遍历序列
题目来自剑指Offer题目:思路:能满足下面思路的就是,不能满足的就不是。可以递归处理。代码:#include #include using namespace std;bool IsBST(int nArr[],int nStart,int nEnd){ if (nStart > nEnd) { return true; } if (nStar原创 2013-07-16 20:47:59 · 776 阅读 · 0 评论 -
每日一练(38) - 从上往下打印二叉树(二叉树的层次遍历)
题目来自剑指Offer题目:层次遍历二叉树代码:#include #include using namespace std;const int SIZE = 100;struct BinaryTreeNode { char m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};void Le原创 2013-07-16 19:29:00 · 1475 阅读 · 0 评论 -
每日一练(39) - 二叉树的深度
题目来自剑指Offer题目:求二叉树的深度代码#include #include using namespace std;const int SIZE = 100;struct BinaryTreeNode { char m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};int Dept原创 2013-07-16 19:39:13 · 894 阅读 · 0 评论 -
每日一题(42) - 二叉树中和为某一值的路径
题目来自剑指Offer题目:代码:#include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};void FindPath(BinaryTreeNode* pRoot原创 2013-07-16 21:42:16 · 1023 阅读 · 0 评论 -
每日一题(36) - 用两个栈实现队列
题目来自剑指Offer题目:思路:代码:#include #include using namespace std;const int SIZE = 5;class Queue{public: Queue(); void AppendTail(int nData); int RemoveHead(); bool IsEmpty(); bool Is原创 2013-07-15 17:37:03 · 929 阅读 · 0 评论 -
每日一题(43) - 丑数
题目来自剑指Offer题目:题目换句话说:丑数就是连续除以2,3,5,之后商为1的数.代码:bool IsUglyNum(int nNum){ //消除因子2 while (nNum % 2 == 0) { nNum /= 2; } //消除因子3 while (nNum % 3 == 0) { nNum /= 3; } //消除因子5 whi原创 2013-07-17 16:43:48 · 909 阅读 · 0 评论 -
每日一题(21) - 编写memmove 函数
题目来自网上题目:编写内存拷贝函数void* Memmove(void* dst,const void* src,size_t count)考点:(1)内存重叠,即源地址指向的内存和目的地址指向的内存可能有重叠(2)指针移动时,必须要给出指针类型。分析:根据源地址指向的内存和目的地址指向的内存的关系,可以分四种情况(1)src >= dst + count:两块内存互不原创 2013-07-02 15:52:03 · 1165 阅读 · 1 评论 -
每日一题(46) - 不能被继承的类
题目来自剑指Offer题目:使用C++设计一个不能被继承的类思路:(1)防止子类调用自己的构造函数和析构函数。注意:不能影响自己创建和销毁对象。方法:把构造函数和析构函数设置为私有函数 + 新增俩方法创建对象和销毁对象原因:(1)把构造函数和析构函数设置为私有函数 :防止子类调用构造函数函数和析构函数,防止继承(2)新增俩方法创建对象和销毁对象:为了不影响自己创建和原创 2013-07-18 17:35:23 · 1155 阅读 · 0 评论 -
每日一题(45) - 数组中的逆序对
题目来自剑指Offer题目:举例:思路:方法(1):暴力方法:对于数组中任意两个数,均做一次判定,判断是否为逆序对。时间复杂度:O(n^2)。方法(2):类似于归并排序。(1)首先把数组分成两个长度均等的数组(2)分布对这两个数组排序(小到大)。(3)之后再求逆序对,同时对把这两个数组合并到一个数组时间复杂度为O(nlogn)为什么这原创 2013-07-18 11:35:48 · 1395 阅读 · 1 评论