
面试题
文章平均质量分 75
qq_34698773
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试题11数值的整数次方
面试题11:数值的整数次方题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大树问题。这道题目有以下几点需要注意:0的0次方是无意义的,非法输入0的负数次方相当于0作为除数,也是无意义的,非法输入base如果非0,如果指数exponent小于0,可以先求原创 2017-05-25 15:48:38 · 182 阅读 · 0 评论 -
面试题27二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。比如输入图4.12 中左边的二叉搜索树,则输出转换之后的排序现向链表。结点定义:public static class BinaryTreeNode { int value; BinaryTreeNode left; Bin原创 2017-05-31 19:13:04 · 178 阅读 · 0 评论 -
面试题24二叉搜索树的后序遍历序列
面试题24:二叉搜索树的后序遍历序列1.输入一个整数的数组,判断该数组是不是某棵二叉搜索树的后序遍历序列。假设输入的数组的任意两个数字互不相同。分析:例如输入数组{5,7,6,9,11,10,8},则返回true,因为这个序列可以找到这样的一棵二叉搜索树满足条件,而对于序列{7,4,6,5}则找不到这样的二叉搜索树。二叉搜索树的性质是,左子树的节点的原创 2017-05-31 20:21:16 · 206 阅读 · 0 评论 -
面试题28字符串的排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 思路:把一个字符串看成两部分组成:第一部分为第一个字符,第二部分为后面的所有字符。求整个字符串的排列,可以看出两步:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面的所有字符交原创 2017-05-31 21:19:55 · 193 阅读 · 0 评论 -
面试题1
面试题1:赋值运算符题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public:CMyString(char *pData=NULL);//构造函数CMyString(const CMyString& str);//拷贝构造函数~CMyString();//析构函数private:char* m_pData;//原创 2017-05-20 16:05:46 · 196 阅读 · 0 评论 -
面试题2
P31、面试题2:实现Singleton模式题目:设计一个类,我们只能生成该类的一个实例 java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一转载 2017-05-20 16:14:47 · 261 阅读 · 0 评论 -
面试题3
面试题3:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: 从数组中选取数字,和目标数字的关系有三种情况:=,。 如果是等于则查找成功; 如果是数组中元素小于要查找的数原创 2017-05-20 16:40:57 · 511 阅读 · 0 评论 -
面试题4
面试题4:替换空格 清空空格题目:分析将长度为1的空格替换为长度为3的“%20”,字符差的产度变长。如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简 单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。但是如果面试官要求 在原先的字符串上操作,并且原创 2017-05-20 17:10:14 · 155 阅读 · 0 评论 -
面试题5
面试题5:从尾到头打印链表题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值遍历链表的顺序是从头到尾,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到的结点第一个输出,“后进先出”,我们可以用栈实现这种顺序。每遍历一个结点时就把该节点放入栈中,遍历完整个链表在从栈顶开始输出节点的值。代码如下:void ReversedStack(List原创 2017-05-20 18:24:02 · 138 阅读 · 0 评论 -
面试题6
面试题6:重建二叉树题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的头结点。二叉树结点定义如下:struct BinaryTreeNode{ int _val; BinaryTre原创 2017-05-20 18:47:40 · 128 阅读 · 0 评论 -
面试题7
面试题7:用两个栈实现队列题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。我们通过一个具体的例子来分析该队列插入和删除元素的过程。首先插入一个元素a,不妨先把它插入到stack1,此时stack1 中的元素有{a},stack2为空。再压入两个元素b和c,还是插入到stac原创 2017-05-20 19:15:32 · 225 阅读 · 0 评论 -
面试题9
面试题9:斐波那契数列题目:写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下:方法一:使用递归。#include#includeusing namespace std;//方法一long long Fib(unsigned int n){ if(n<=0) return n; if(n==1) return n; retur原创 2017-05-21 14:42:31 · 207 阅读 · 0 评论 -
面试题8
面试题8:旋转数组的最小数题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如数组{3,4,5,1,2}是{1,2,3,4,5}的一个旋转,该数组最小值为1.思路:1. 设置两个指针,初始状态第一个指针指向前面子数组的第一个元素,第二个指针指向后面子数组的最后一个元素;2. 找到两原创 2017-05-21 14:59:57 · 146 阅读 · 0 评论 -
面试题10
面试题10:二进制中1的个数题目:请实现一个函数,输入一个整数,输出该数二进制中1的个数方法一:判断整数二进制表示中最右边一位是否为1,接着把整数右移一位判断倒数第二位是否为1,以此类推,直到整数变成0为止。int NumberOf1(int n){ int count=0; while(n) { if(n&1) count++; n=n>>1; }原创 2017-05-21 15:10:48 · 160 阅读 · 0 评论 -
面试题25二叉树中和为某一值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶结点所经过的所有的结点形成一条路径。如下图,输入二叉树和整数22,则打印出两条路径,第一条路径包含结点10,12,第二条路径包含的结点为10,5,7.一般的数据结构和算法的教材都没有介绍树的路径,因此对大多数应聘者而言,这是一个新概念,也就很难一下子想出完整的解题思路。这个时候原创 2017-05-31 12:22:05 · 393 阅读 · 0 评论 -
面试题31连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间负责度为O(n)。看到这个题目,我们首先想到的是求出这个整型数组所有连续子数组的和,长度为n的数组一共有 n(n+2)/2个子数组,因此要求出这些连续子数组的和最快也需要O(n^2)的时间复杂度。但是题目要求的O(n)的时间复杂度,因此上述思路不能解决问题。看到O(原创 2017-06-04 19:12:13 · 185 阅读 · 0 评论 -
面试题12打印1到最大的n位数
题目:输入数字n,按顺序打印出从1最大的n位十进制数。例如输入3,则打印出1,2,3,....,一直到最大的3位数即999陷阱:考虑大数问题,就是输入的数字非常大的情况,如100,怎么表示100位的数呢。用字符串保存细节问题1,字符串递增的溢出判断2,打印时过滤0源代码#include "stdio.h" #include "stdlib.h"转载 2017-05-25 15:52:48 · 230 阅读 · 0 评论 -
面试题13在o(1)时间删除链表结点
面试题13:在O(1)时间删除链表结点题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。 链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode* m_pNext;};void DeleteNode(ListNode** pListHead,ListN原创 2017-05-25 15:57:27 · 334 阅读 · 0 评论 -
面试题14调整数组顺序是奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。1、基本实现:如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有的数字往前面挪动一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位。由于没碰到一个偶数就需要移动O(n)个数字,因此原创 2017-05-25 16:02:21 · 170 阅读 · 0 评论 -
面试题15连表中倒数第k个结点
面试题15:链表中倒数第K个结点题目:输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。看到这道题目,最直观的想法,就是先算出链表的长度n,然后倒数第k个结点就是顺序的第(n-k+1)个数转载 2017-05-25 16:05:42 · 184 阅读 · 0 评论 -
面试题16反转链表
面试题16:反转链表题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 假设有链表A->B->C->D->E->F->G。在反转链表过程中的某一阶段,其链表指针指向为:AF->G。也就是说在结点D之前的所有结点都已经反转,而结点D后面的结点E开始的所有结点都没有反转。这样D跟E之间存在了断裂。我们如果要实现链表的反转,会有以下几个重要步骤原创 2017-05-25 16:09:02 · 163 阅读 · 0 评论 -
面试题17合并两个排序链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增顺序的。struct ListNode{ int m_nKey; ListNode* m_pNext;}测试用例:1)功能测试(输入的两个链表有多个结点,结点的值互不相同或者存在值相等的多个结点);2)特殊输入测试(两个链表的一个或者两个头结点为nul原创 2017-05-25 16:15:21 · 185 阅读 · 0 评论 -
面试题18树的子结构
题目: 输入两颗二叉树A和B,判断B是不是A的子结构。如下图:树B是树A的子结构。方法一:分析:要判断树B是否为树A的子结构,可以分为两步,第一步在树A中找到和树B的根节点的值一样的结点R,第二步再判断树A中以R为根节点的子树是不是包含和树B一样的结构。#includeusing namespace std;struct BinaryTreeNode{ int原创 2017-05-25 16:19:07 · 218 阅读 · 0 评论 -
面试题19二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出他的镜像树。算法分析: 求一棵树的镜像过程:我们先前序遍历这棵树的每一个节点,如果遍历到节点有子节点,就交换它的两个子节点。当交换完所有非叶子子节点的左右子节点后,就得到了树的镜像。树的镜像是一个比较新的概念,我们未必能够一下子相出求树的镜像的方法。为了能够形成直观的印象,我们可以自己画一棵二叉树原创 2017-05-28 17:28:56 · 290 阅读 · 0 评论 -
面试题20顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序一次打印出每个数字,例如1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16则一次打印出数字:1 2#includeusing namespace std;void printNumber(int number){ printf("%d\t", number);}void Pri原创 2017-05-30 18:30:31 · 182 阅读 · 0 评论 -
面试题21包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。思路: 如果只用一个元素保存最小的元素,那么当最小的元素被弹出后,就没有办法得到剩余元素中最下的元素。 所以,最好的办法是将每次的最小元素(之前的最小元素和新压入的元素两者的较小者)都保存起来放到另外一个辅助栈里。这是剑指offer书中的举例一个模拟过程: #include原创 2017-05-30 19:09:20 · 218 阅读 · 0 评论 -
面试题22栈的压入弹出序列
剑指offer-面试题22.栈的压入,弹出序列题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该该压栈序列的弹出序列。本题的题解步骤如下:1.设置一个辅助栈S,用于模拟出栈原创 2017-05-30 20:38:12 · 216 阅读 · 0 评论 -
面试题23从上往下打印二叉树
题目:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图的二叉树,则一次打印出8,6,10,5,7,9,11.这道题实质上考察的就是树的遍历算法,只是这种遍历不是我们熟悉的前序、中序或者后序遍历。由于我们不太熟悉这种按层遍历的方法,可能已下载也想不清楚遍历的过程。因为按层打印的顺序决定应该先打印的根节点,所以我们从树的根节点开始分析。为了接下原创 2017-05-30 21:22:57 · 187 阅读 · 0 评论 -
面试题30最小的k个数
题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8这8个数字,则最小的四个数字为1,2,3,4方法一:1.首先随机查找数组中一个元素作为一个基准,然后parition一次使得数组左边的元素小于基本,数组右边的元素大于基准。2.此时将再将基准插入到数组适当的位置并返回该位置的索引。3.如果索引index小于k-1则继续在[index+1,en原创 2017-06-04 18:40:33 · 242 阅读 · 0 评论 -
面试题29数组中出现次数超过一半的数字
题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。题目分析解法一:基于快排中分割算法的方法 数组中有一个数字出现的次数超过了数组长度的一半。如果把这个数组排序,那么排序之后位于数组中间的数字一定就是那个出现次数超过数原创 2017-06-04 16:18:43 · 198 阅读 · 0 评论