剑指offer错题
小心眼YUAN
这个作者很懒,什么都没留下…
展开
-
面试题:树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构 分析: 应该有两个递归: 递归一:依此检查两棵树的是不是相同(包含) 递归二:一次以A树的每个节点为根,与B进行递归一的检查 代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *rig...原创 2019-04-28 10:48:51 · 84 阅读 · 0 评论 -
面试题 数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 分析 1.如果对每一个数字,依此查找它前面的所有数字,复杂度为O(n2); 2.结合归并排序的思想,复杂度为O(nlogn). 3.用long long防止溢出 代码 ...原创 2019-06-03 15:26:00 · 88 阅读 · 0 评论 -
面试题:求1+2+3+...+n
题目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C) 分析: 分析 利用构造函数来累加N和sum,每构造一个变量就执行一次构造函数 利用虚函数。!!n来判断是否为零。n非零为true,调用父类虚函数,零为false,调用子类虚函数。 利用函数指针,同上 利用模板,将0或1特例化。 利用...原创 2019-06-13 13:59:48 · 467 阅读 · 0 评论 -
面试题:不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 分析 将思路转向位运算,按照加法进位来思考 代码: class Solution { public: int Add(int num1, int num2) { int sum,carry; do{ sum=num1^num2...原创 2019-06-13 13:40:12 · 102 阅读 · 0 评论 -
面试题:孩子们的游戏(圆圈中最后剩下的数)
题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去.....原创 2019-06-13 10:28:09 · 116 阅读 · 0 评论 -
面试题:数组中只出现一次的两个数
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 分析: 合理使用位运算,两个相同的数字求异或,结果为0 代码: class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { if...原创 2019-06-05 11:07:24 · 365 阅读 · 0 评论 -
面试题:平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树 分析: 合理设计函数参数,记录树的深度,避免搜索重复节点。 代码: class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { int depth=0; return IsBalanced(pRoot,depth...原创 2019-06-05 10:28:17 · 417 阅读 · 0 评论 -
面试题:丑数
题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 分析 用数组来保存求过的丑数,后面的丑数等于前面的丑数乘于2 3 5。 代码 class Solution { public: int GetUglyNumber_Solution(in...原创 2019-05-27 11:31:50 · 152 阅读 · 0 评论 -
面试题:最小K个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解法一:基于Partition函数的O(n)算法。缺点:修改数据 解法二:基于最大堆或红黑树(set)的O(nlogk)的解法。适合海量数据 class Solution { public: vector<int> GetLeastNu...原创 2019-05-15 17:56:01 · 106 阅读 · 0 评论 -
面试题:数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 解法一:基于Partition函数的O(n)方法 这种方法相当于求“第n/2大的数字”。 class Solution { public: void swap(...原创 2019-05-15 11:08:22 · 131 阅读 · 0 评论 -
面试题11:数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 分析: 指数可能为负数和0,注意0的0次方要提醒输入错误; 用递归解法可以在O(logn)的复杂读求一个数的正数次方 用fabs(a,b)<1e-15(1e-6)比较浮点数是否相等 代码: class Solution { public: doubl...原创 2019-04-25 11:05:27 · 100 阅读 · 0 评论 -
面试题:正则表达式匹配
题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。 分析 (1)特殊情况检查 (2)*(pattren+1)=='*': ...原创 2019-06-17 13:17:30 · 198 阅读 · 0 评论