面试题
面试中遇到的问题。
life_test
这个作者很懒,什么都没留下…
展开
-
【剑指offer】顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 则依次打出数字 1、2、3、4、12、13、14、5、11、16、15、6、10、9、8、7。 自己的解法: void print_cube(const int n) { assert( n > 0 ); int array[n][n]; // 用以保留数据 ...原创 2018-09-29 18:05:00 · 163 阅读 · 0 评论 -
【剑指offer】二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二叉树结点的定义如下: struct binaryTreeNode { int m_nValue; binaryTreeNode * m_pLeft; binaryTreeNode * m_pRight; }; 递归解法: void mirrorRecursively (bin...原创 2018-09-17 21:10:58 · 120 阅读 · 0 评论 -
【剑指offer】树的子结构
题目:输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。二叉树结点的定义如下: struct binaryTreeNode { int m_nValue; binaryTreeNode * m_pLeft; binaryTreeNode * m_pRight; }; bool doesTree1hasTree2( binary...原创 2018-08-10 16:42:14 · 121 阅读 · 0 评论 -
【剑指offer】合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入链表 1 和链表 2,则合并之后的升序链表如链表 3 所示。链表结点定义如下: struct listNode { int m_nValue; listNode * m_pNext; }; 链表1: 【1】【3】【5】【7】 链表2: 【2】【4】【6】【8】 ...原创 2018-08-10 15:13:42 · 107 阅读 · 0 评论 -
【剑指offer】反转单链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下: struct listNode { int m_nKey; listNode * m_pNext; }; /* Function: reverseList Description: reverse the single list ...原创 2018-08-10 10:06:22 · 154 阅读 · 0 评论 -
【剑指offer】链表中倒数第K个结点
题目:输入一个链表,输出该链表中倒数第k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6 个结点,从头结点开始它们的值依次是1 、2、3、4、5 、6。这个个链表的倒数第3 个结点是值为4 的结点. 链表结点定义如下: struct listNode { int m_nValue; listNode * m...原创 2018-08-09 12:33:55 · 113 阅读 · 0 评论 -
【剑指offer】调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位予数组的后半部分。 完成基本功能的解法: void ReorderOddEven( int pData[], const int length ) { if( NULL == pData || length <= 0 ) return; int *p...原创 2018-08-06 16:22:08 · 105 阅读 · 0 评论 -
【剑指offer】在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下: struct listNode { int m_nValue; listNode * m_pNext; }; void deleteNode( listNode ** pListHead, listNode * pToBeDeleted ); void...原创 2018-08-06 14:54:33 · 111 阅读 · 0 评论 -
【剑指offer】打印1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。 字符串模拟加法: bool increment( char * number ) { bool isOverflow = false; int nTakeOver = 0, i; int nLength = strlen( number ); ...原创 2018-08-06 14:12:09 · 140 阅读 · 0 评论 -
剑指offer
1、赋值运算符函数 2、实现Singleton模式 3、二维数组中的查找 4、替换空格 5、从尾到头打印链表 6、重建二叉树 7、用两个栈实现队列 8、旋转数组的最小数字 9、斐波那契数列 10、二进制中 1 的个数 11、数值的整数次方 12、打印 1 到最大的 n 位数 13、在O(1)时间删除链表结点 14、调整数组顺序使奇数位于偶数前面 15、链表中倒数第K个结...原创 2018-09-17 21:29:33 · 151 阅读 · 0 评论 -
【剑指offer】数值的整数次方
题目:实现函数 double power( double base, int exponent ),求 base 的 exponent 次方。不得使用库函数,同时不需要考虑大数问题 全面但不够高效的解法: bool g_InvalidInput = false; // 全局变量,指示函数入参是否合理 const double EPS = 1e-6; // 判断double相等的辅助精度 b...原创 2018-07-26 18:32:06 · 157 阅读 · 0 评论 -
【剑指offer】二进制中 1 的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如把 9 表示成二进制是 1001,有 2 位是 1 。因此如果输入 9 ,该函数输出 2 。 常规解法: int numberOf1( int a ) { int result = 0; int flag = 1; while( 0 != flag ) { if( 0 ...原创 2018-07-25 17:30:53 · 125 阅读 · 0 评论 -
【剑指offer】斐波那契数列
题目一:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: long long fibonacci( int n ) { if( n < 0 ) throw(" Invalid n "); long long result[2] = { 0, 1 }; if( n < 2 ) // 前两个数字直...原创 2018-07-25 16:46:40 · 133 阅读 · 0 评论 -
【剑指offer】旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾, 我们称之数组的旋转。输入一个递增排序的数组的一个旋转, 输出旋转数组的最小元素。例如数组 { 3, 4, 5, 1, 2 } 为 { 1, 2, 3, 4, 5 } 的一个旋转,该数组的最小值为 1 int minInOrder( int data[], index1, index2 ) { if( NULL == data || i...原创 2018-07-25 15:39:17 · 108 阅读 · 0 评论 -
【剑指offer】用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 template <typename T> class CQueue { public: CQueue( void ); ~CQueue( void ); void appendTail( co...原创 2018-07-24 18:09:25 · 100 阅读 · 0 评论 -
【剑指offer】重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如:前序遍历序列{ 1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8,6},重建出下图所示的二叉树并输出它的头结点。 二叉树结点的定义如下: struct BinaryTreeNode { int m_nVal...原创 2018-07-24 16:26:00 · 120 阅读 · 0 评论 -
【剑指offer】从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 方法一:利用栈结构先进后出的特点 void printListRever( listNode * pHead ) { stack<listNode *> nodes; listNode *pNode = pHead; while( NULL != pNode ) { ...原创 2018-07-24 13:45:12 · 113 阅读 · 0 评论 -
【剑指offer】替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.”,则输出“We%20are%20happy.”。 /* string 内存应该足够长以存放替换后的字符串,否则会出现内存越界。 */ void replaceBlank( char * string ) { if( NULL == string ) // 判断 string 入参是否...原创 2018-07-24 11:14:24 · 116 阅读 · 0 评论 -
【剑指offer】二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 bool find( int * matrix[], int rows, int columns, int value ) { bool found = false; if( NULL != ma...原创 2018-07-23 11:20:56 · 117 阅读 · 0 评论 -
【剑指offer】实现Singleton模式
题目:设计一个类,我们只能生成该类的一个实例 不好的解法一:只适用于单线程环境 class Singleton1 { public: static Singleton1 * Intance() { if( NULL == instance ) instance = new Singleton1(); return ins...原创 2018-07-20 19:07:39 · 146 阅读 · 0 评论 -
【剑指offer】赋值运算符函数
题目:如下为类型 CMyString 的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString( char * pData = NULL ); CMyString( const CMyString & str ); ~CMyString( void ); private: char * m_pData;...原创 2018-07-20 10:41:42 · 154 阅读 · 0 评论 -
翻转二叉树
输入一个二叉树,输出其镜像(交换所有节点的左右子树)。 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 定义二叉树结点: struct NodeBinaryTree { int data; Nod...原创 2018-08-01 11:22:32 · 669 阅读 · 0 评论