
剑指offer
PinkBananA_
不是机会太少而是能力太小
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【剑指offer】2.2 编程语言
面试题1:赋值运算符函数题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString();private: char* m_pData;...原创 2019-06-21 12:09:31 · 1057 阅读 · 0 评论 -
【剑指offer】4.2 画图让抽象问题形象化
面试题19:二叉树的镜像题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};解答:代码如下:void Mirror(BinaryTreeNo...原创 2019-09-01 10:40:56 · 321 阅读 · 0 评论 -
【剑指offer】3.4 代码的鲁棒性
面试题15:链表中倒数第k个结点题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。链表结点定义如下:struct ListNode{ int m_nValue; ListNode* m_...原创 2019-08-31 20:49:52 · 325 阅读 · 0 评论 -
【剑指offer】3.3 代码的完整性
面试题12:数值的整数次方题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解答:代码如下://判断两个浮点数是否相等有误差,需要特殊处理bool equal(double num1,double num2){ bool res = false; if((num...原创 2019-08-31 16:53:06 · 218 阅读 · 0 评论 -
【剑值offer】2.4.3 位运算
面试题12:二进制中1的个数题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。解答:代码如下:int NumberOf1(int n){ int count = 0; while(n != 0) { n &= (n - 1); count++; } ...原创 2019-08-30 10:29:17 · 205 阅读 · 0 评论 -
【剑指offer】2.4.2 查找和排序
面试题11:旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。解答:和二分查找一样,我们用两个指针分别指向数组的第一个元素和最后一个元素。接着找到数组中间的元素。如果该中间元素大于或者等于第一个指针指向的元...原创 2019-06-29 18:16:32 · 267 阅读 · 0 评论 -
【剑指offer】2.4.1 递归和循环
如果面试题要求在二维数组(可能具体表现为迷宫或者棋盘等)上搜索路径,那么可以尝试用回溯法。通常回溯法很适合用递归的代码实现。只有当面试官限定不可以用递归实现的时候,可以在考虑用栈来模拟递归的过程。 如果面试题是求某个问题的最优解,并且该问题可以分为多个子问题,那么可以尝试用动态规划。在用自上而下的递归思路去分析动态规划问题的时候,就会发现子问题之间存在重叠的更小的子问题。为了避免...原创 2019-06-28 21:35:02 · 226 阅读 · 0 评论 -
【剑指offer】2.3.5 栈和队列
面试题9:用两个栈实现队列题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。解答:当stack2不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。当stack2为空时,就把stack1中的元素逐个弹出并压入stack2。由于先进入队列的元素被压倒stack1的底端...原创 2019-06-27 20:28:20 · 228 阅读 · 0 评论 -
【剑指offer】2.3.3 链表
面试题6:从尾到头打印链表题目:输入一个链表的头节点,从尾到头反过来打印出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey; ListNode *m_pNext;};解答:从题目可知,第一个遍历到的结点最后一个输出,而最后一个遍历到的结点第一个输出。这就是典型的“先进后出”,可以用栈来实现这种顺序。代码如下:vec...原创 2019-06-24 20:07:23 · 214 阅读 · 0 评论 -
【剑指offer】2.3.2 字符串
面试题5:替换空格题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。解答:我们可以先遍历一遍字符串,统计出字符串中空格的数目,由此计算出替换后字符串的长度。可以从字符串的末尾开始复制和替换。首先准备两个指针p和q,p指向原始字符串的末尾,q指向替换后字符串的末尾。接下来向前移动指针p,逐个把它...原创 2019-06-24 18:07:59 · 181 阅读 · 0 评论 -
【剑指offer】2.3.4 树
面试题7:重建二叉树题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如:输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建如下图所示的二叉树并输出它的头节点。二叉树节点的定义如下:struct BinaryTreeNode{ int m_nValue;...原创 2019-06-26 21:56:49 · 198 阅读 · 0 评论 -
【剑指offer】2.3.1 数组
面试题3:数组中重复的数字题目一:找出数组中重复的数字。 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。解答:方法1:先对输入的数组排序,然后从头开始扫描数组,找到重...原创 2019-06-22 20:53:42 · 185 阅读 · 0 评论 -
【剑指offer】4.3 具体让抽象问题具体化
面试题21:包含min函数的栈题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。解答:代码如下:stack<int> ValSta;stack<int> MinSta;void push(int value){ ValSta.push(value); if(...原创 2019-09-04 10:27:35 · 352 阅读 · 0 评论