
剑指offer
AlphaGQ
握不住的沙,何不随手扬了它
展开
-
面试题50:树中两个节点的最低公共祖先
当每个节点都有指向父节点的指针时,可转换成两个链表的公共祖先。当该树是一个二叉搜索树时,需要从树的根节点开始于两个输入的节点比较。如果当前节点的值都比两个节点的值大,那么最低的公共祖先一定在该节点的左子树中,如果都小则在右子树中。利用递归直到找到当前结点的值位于两个节点的中间那么这个便是最低的公共祖先;假设既没有父节点,也不是二叉搜索树,则用下边思路:假设输入节点是F和H,判断原创 2017-08-29 16:41:37 · 530 阅读 · 0 评论 -
面试题40:数组中只出现一次的数字
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。 题目:一个整形数组中出了两个整形的数组之外,其他的数字都出现了两次。请写出程序找出这两个只出现一次的数字。要求空间复杂度是O(1),时间复杂度是O(n); 例如输入{2,4,3,6,3,2,5,5},因为只有4,6这两个数字只出现了一次,其他都出现两次所以输原创 2017-09-21 19:01:23 · 1371 阅读 · 0 评论 -
面试题41:和为s的两个数字 VS 和为s的连续正整数序列
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可; 例如输入{1,2,4,7,11,15}和数字15.由于4+11=15,则输出4和11;思路,两层循环暂时不考虑,因为时间复原创 2017-09-21 18:44:49 · 564 阅读 · 0 评论 -
面试题42:翻转单词顺序 VS 左旋转字符串
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。 题目一:输入一个英文句子,翻转句子中的单词顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。例如输入字符串“I am a student.”,则输出“student. a am I”。 思路:将I am a student.翻转得到.tn原创 2017-09-21 18:33:08 · 981 阅读 · 0 评论 -
面试题43:n个骰子的点数
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能值得出现概率。 一共6个面,n个骰子所有点数最小值为n,最大值为6n。n个骰子的排列组合为6^n。要解决这个问题,我们需要先统计出每一个点数出现的次数,然后把每一个点数出现的原创 2017-09-21 18:25:25 · 640 阅读 · 0 评论 -
面试题44:扑克牌的顺子
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的,2-10为数字本身,A为1,J=11,Q=12,K=13;而大小王可以看成任意数字。思路:大小王是特殊的数字,把它设置为0.接下来分为三个步骤 1、首先把数组排序;原创 2017-09-21 18:22:02 · 417 阅读 · 0 评论 -
面试题45:圆圈中最后剩下的数字
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。题目:0,1,2,3……n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 思路:本题是约瑟夫环的问题。有两种解法:1 用环形链表模拟圆圈 2 分析每次被删除的数字规律并直接计算出圆圈中最后剩下的数字。解法一:创建共有n原创 2017-09-21 17:15:36 · 482 阅读 · 0 评论 -
面试题47:不用加减乘除做加法
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+,-,×,÷四则运算符号。 思路:分三步; 第一步:相加不考虑进位情况,用异或来处理 第二步:考虑进位信息,用与操作,左移一位处理 第三步:将第一步和第二部的结果相加(其实就是重复第一步,第二原创 2017-09-21 17:09:17 · 410 阅读 · 0 评论 -
面试题48:不能被继承的类
题目:用C++ 设计一个不能被继承的类 常规解法:在C#中定义了关键字sealed,被这个关键字修饰的类不能被继承;在Java中同样也有关键字final,C++中没有类似的关键字,需要我们自己造轮子,在C++的子类的构造函数会自动调用父类的构造函数,析构函数也是如此,如果我们把它的构造函数和析构函数都定义为私有函数。 如果构造和析构都是私有,那么怎样才能得到该类的实原创 2017-09-21 17:05:47 · 657 阅读 · 0 评论 -
面试题49:把字符串转换成整数
//考虑不同的输入情况bool g_flag = true;int atoi(char a[]){ if (a == NULL) { g_flag = false; return 0; } int i=0, sum = 0, digitSign = 1; char* p = a; if (*p == '-') { digitSign = -1; p++; }原创 2017-09-21 17:01:25 · 396 阅读 · 0 评论 -
面试题39:二叉树的深度
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。 题目一:输入一颗二叉树的根结点,求该树的深度。从根节点到叶节点经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 利用递归代码如下:struct BinaryTreeNode{ int m_data; BinaryTreeNode原创 2017-09-21 19:04:21 · 644 阅读 · 0 评论 -
面试题46:求1+2+3+4+……n
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。题目:求1+2+3+……+n,要求不能使用乘除法,for,while,if,else,switch。Case等关键字及条件判断语句(A?B:C)。 解法一:利用构造函数求解,将类的数据成员声明为静态类型,外部定义,求n个数的和,我们可以创建n个实例,构造函数会被调用n次,代码如下:原创 2017-09-21 17:13:13 · 1481 阅读 · 0 评论