- 博客(22)
- 资源 (13)
- 收藏
- 关注
原创 剑指offer-5-面试36:数组中的逆序对(时间效率和空间效率的平衡)
题目 分析 测试用例代码 本题考点 题目 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 分析 看到这个题目,我们第一反应是顺序扫描整个数组。每扫描到一个数字的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组成了一个逆序对。假设数组中含有 n 个数字。由于每个数字都要和O(n)个数
2016-07-15 15:39:37 900
原创 剑指offer-5-面试35:第一个只出现一次的字符
题目 分析 测试用例代码 本题考点 本题扩展相关题目 题目 在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’ 分析 最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)
2016-07-15 13:25:24 769
原创 剑指offer-5-面试34:丑数(优化时间和空间效率)
题目 分析 逐个判断每个整数是不是丑数的解法直观但不够高效创建数组保存已经找到的丑数用空间换时间的解法 测试用例代码 本题考点 题目 我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如 6、8都是丑数,但14不是,因为它包含因子7.习惯上我们把 1 当做第一个丑数。 分析 逐个判断每个整数是不是丑数的解法,直观但不够高效所谓一个
2016-07-15 10:35:12 1029
原创 剑指offer-5-面试33:把数组排成最小的数(时间效率)
题目 分析 测试用例代码 本题考点 题目 输入一个正整数数组,把数组里所有数字拼接起来拍成一个树,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这 3 个数字能排成的最小数字 321323. 分析 最直接的做法是先求出这个数组中所有数字的全排列,然后把每个排列拼起来,最后求出拼起来的数字的最小值。其实,此题可以找到一个排序规则,数组根据这个规则排序之后能排
2016-07-14 20:58:09 815
原创 剑指offer-5-面试32:从 1 到 n 整数中 1 出现的次数(时间效率)
题目 分析 不考虑时间效率的解法靠它想拿offer有点 难从数字规律着手明显提高时间效率的解法能让面试官耳目一新 测试用例代码 本题考点 题目 从 1 到 n 整数中 1 出现的次数。题目 :输入一个整数 n ,求从 1 到 n 这n 个整数的十进制表示中1 出现的次数。 例如 输入 12,从 1 到 12 这些整数中包含 1 的数字 有 1, 10 ,11 和 12, 1 一共出现了
2016-07-14 17:32:18 688
原创 剑指offer-5-面试31:连续子数组的最大和(时间效率)
题目 分析 测试用例代码 本题考点 题目 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)例如,输入的数组为 {1,-2, 3, 10,-4,7,2,-5 },和最大的子数组为 {3,10,-4,7,2 },因此输出为该子数组的和 18. 分析 看到 测试用例&代码 本
2016-07-14 15:57:14 835
原创 剑指offer-4-解决面试题的思路
面试官谈面试思路画图让抽象问题形象化举例让抽象问题具体化分解让复杂问题简单化面试官谈面试思路编码前讲自己的思路是一个考察指标。合格的应聘者需要在做事之前明白自己要做的事情究竟是什么,以及该怎么做。一开始就编码的人员,除非后面表现非常优秀,否则很容易通不过。可以采用举例子、画图等多种方式,解释清楚问题本身和问题解决方案是关键。画图让抽象问题形象化画图是在面试过程中应聘者用来帮助自己分析、推理的
2016-07-12 19:38:00 1912
原创 剑指offer-4-面试26:复杂链表的复制
题目 分析 测试用例代码 本题考点 题目 请实现函数 ComplexListNode* Clone( ComplexListNode* pHead ),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个 m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如下。struct ComplexListNode{ int
2016-07-12 12:44:51 819
原创 剑指offer-4-面试25:二叉树中和为某一值的路径
题目 分析 测试用例代码 本题考点 题目 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的结点形成一条路径。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRigh
2016-07-11 17:39:18 618
原创 剑指offer-4-面试24:二叉搜索树的后序遍历序列
题目 分析 测试用例代码 本题考点 相关题目举一反三 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 分析 例如,输入数组{ 5,7,6,9,11,10,8},则返回true,因为这个整数序列是图 4.6二叉搜索树的后续遍历结果。如果输入的数组是{7,4,6,5},由于没有那颗二
2016-07-08 16:21:18 822
原创 剑指offer-4-面试23:从上往下打印二叉树
题目 分析 本题考点 本题扩展 举一反三 题目 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如,输入图4.5中的二叉树,则依次打印出8、6、10、5、7、9、11 二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeN
2016-07-08 13:25:38 881
原创 剑指offer-4-面试题22:栈的压入、弹出序列
题目 分析 测试用例代码 本题考点 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5 是某栈的压栈序列,序列 4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。 分析 解决这个问题很直观的想法就是建立一个辅助栈,把输入的第一个序列中的数字依
2016-07-07 22:09:40 863
原创 剑指offer-4-面试21:包含min函数的栈
题目 分析 测试用例代码 本题考点 题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及 pop的时间复杂度都是O(1) 分析 看到这个问题,我们第一反应可能时每次压入一个新元素进栈时,将栈里的所有元素排序,让最小的元素位于栈顶,这样就能在O(1)时间得到最小元素了。但这种思路不能保证最后压入栈的元素能够最先出栈,因此这个数据结构
2016-07-07 17:17:21 731
原创 剑指offer-4-面试题20:顺时针打印矩阵(画图使抽象问题形象化)
题目 分析 测试用例代码 本题考点 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16则依次打印出数字 1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10 分析 这道题完全没有涉及复杂的数据结构
2016-07-07 15:11:41 831
原创 剑指offer-4-面试19:二叉树的镜像
题目 分析 测试用例代码 本题考点 题目 完成一个函数,输入一个二叉树,该函数输出它的镜像二叉树结点的定义如下:struct BinaryTreeNode{ int m_nvalue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}; 分析 树的镜像对很多人来说会是一个新的概念,未必一下子能够想出求树的镜
2016-07-07 10:29:46 576
原创 剑指offer-3 -高质量的代码
代码质量代码的规范性代码的完整性从3方面确保代码的完整性3种错误处理的方法代码的鲁棒性代码质量下面是几个面试官对代码质量的要求(1)代码的容错能力,对一些特别的输入需要考虑异常状况,考虑资源的回收问题。。。(2)一些基本的知识点,如double 类型的数据比较的问题。if( d1==d2 ) 上述比较有问题,由于精度原因不能用等号判断两个小数是否相等。(3
2016-07-06 22:26:10 916
原创 剑指offer-3-面试16:反转链表
题目 分析 测试用例代码 本题考点 本题扩展 题目 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表的定义如下:struct ListNode{ int m_nkey; ListNode* m_pNext;}; 分析 不难注意到,由于结点 i 的m_pNext指向了它的前一个结点,导致我们无法在链表中遍历到结点 j 。为了避免链表在结点i
2016-07-06 19:50:28 684
原创 剑指offer-3-面试15:链表中倒数第k个结点
题目 分析 测试用例代码 本题考点 相关题目举一反三 题目 输入一个链表,输出该链表中第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如,一个链表有6个结点,从头结点开始它们的值依次是 1、2、3、4、5、6 。这个链表的倒数第3个结点是值为4的结点。 链表结点定义如下:struct ListNode{ int m_nValue;
2016-07-06 19:17:41 579
原创 剑指offer-3-面试14:调整数组顺序使奇数位于偶数前面
题目 分析 只完成基本功能的解法仅适用于初级程序员考虑可扩展性的解法能秒杀offer 测试用例代码 本题考点 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 分析 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组
2016-07-04 17:33:04 668
原创 剑指offer-3-面试13:在O(1)时间删除链表结点
题目 分析 测试用例代码 本题考点 题目 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};void DeleteNode( ListNode** pListHead, ListNode*
2016-07-03 10:49:58 2066
原创 剑指offer-3-面试12:打印1到最大的n位数
题目 分析 跳进面试官陷阱没有考虑大数问题在字符串上模拟数字加法的解法 测试用例代码 本题考点 题目 输入数字n,按顺序打印出从1到最大的n位十进制数。比如,输入3,则打印出1、2、3一直到最大的3位数,即 999。 分析 跳进面试官陷阱,没有考虑大数问题题目看起来很简单。看到这个问题之后,最哦容易想到的办法是先求出最大的n位数,然后用一个循环从1开始
2016-07-01 20:51:08 1287
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人