剑指offer
yh_cheer
这个作者很懒,什么都没留下…
展开
-
【剑指offer】面试题46:把数字翻译成字符串
题目描述给定一个数字,按规则翻译成字符串:0翻译成“a”,1翻译成“b”,以此类推…25翻译成“z”,一个数字可能有多种翻译,比如12258有5种翻译,分别是bccfi,bwfi,bczi,mcfi,mzi。编程实现一个函数,计算一个数字有多少种不同解法。解题思路:最开始的一个或两个数字被转换为字符后,接着翻译后面的数字。即递归的思想。几个注意点:1.递归是自上而下解决问题的,但会...原创 2019-03-16 03:29:21 · 176 阅读 · 0 评论 -
【剑指offer】面试题54:二叉搜索树的第K小节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。解题思路这题考察二叉搜索树的性质,即中序遍历是有序的。维护一个数组保存中序遍历的结果,答案就能得出来了。注意点一开始我漏了做一个检测,即k是否大于返回的中序遍历结果,导致有部分案例ac不了。【考点】 树 中序遍历class Solution {...原创 2019-03-26 20:08:18 · 399 阅读 · 0 评论 -
【剑指offer】面试题53:在排序数组中查找数字
题目描述统计一个数字在排序数组中出现的次数。解题思路:遇到排序数组,优先无脑考虑二分法。找出这个数字的左边位置,再找出这个数字的右边位置,两个位置的距离就是出现的次数。复杂度是O(logn)。注意点注意边界判断,即没有找到的时候返回的是-1,此时应特殊输出0。【考点】 查找class Solution {public: int GetNumberOfK(vector<...原创 2019-03-26 19:14:53 · 123 阅读 · 0 评论 -
【剑指offer】面试题56:数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。这题把异或这个操作符玩6了。异或的重要特性:任何一个数字异或自己都为0。解题步骤题目中,数组里有两个数字只出现一次。因此,对数组每个数进行异或,最后的结果也就是那两个只出现一次的数字异或,而且这个结果一定不是0!上述的结果中一定不是0,即至少有一位是1,我们找出这个1,说明那两个只...原创 2019-03-29 16:06:23 · 186 阅读 · 0 评论 -
【剑指offer】面试题55:平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路递归判断每个节点的深度是否满足平衡二叉树的要求,即左右子树的高度差不超过1。注意点递归:从上往下递归会造成重复计算影响效率,可以通过后序遍历从下往上解决。剪枝:一旦有结点判断出不是平衡二叉树,则不必再判断后续未处理的结点,直接返回结果。解题步骤递归计算结点的深度,从最左下的结点开始判断,如果不满足平衡二叉...原创 2019-03-29 14:24:12 · 261 阅读 · 0 评论 -
【剑指offer】面试题51:数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,s...原创 2019-03-19 01:00:22 · 155 阅读 · 0 评论 -
【剑指offer】面试题52:两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点。解题思路:书上是两种方法,讨论区有一种超短解法。我写的是书上的第二种解法,即先遍历两个链表的长度,计算它们的差值d,较长的链表先走d步,然后双指针一起遍历直到找到相同的结点。解题步骤:同上【考点】链表/*struct ListNode { int val; struct ListNode *next; ListNode...原创 2019-03-25 14:14:11 · 129 阅读 · 0 评论 -
【剑指offer】面试题50:第一次只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).这题比较简单,两个循环搞定,时间复杂度是O(n),但要开一个数组来存每个字符出现的次数,因为是固定的256大小,所以空间复杂度是O(1)。典型的空间换时间。第一个循环计算每个字符出现次数,第二个循环寻找第一个只出现一次的...原创 2019-03-18 13:52:56 · 140 阅读 · 0 评论 -
【剑指offer】面试题49:丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。@事无巨细,悉究本末 评论区这个大佬写的太好了,膜一下~我直接贴过来吧链接:https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf...原创 2019-03-18 01:25:40 · 191 阅读 · 0 评论 -
【剑指offer】面试题48:最长不含重复字符的子字符串
题目描述从字符串中找出一个最长的不包含重复字符的子字符串,计算这个字符串长度。字符串只包含a-z字母。如“arabcacfr”,最长的包含重复子字符串是“acfr”,长度是4。解题思路:已知第i-1个字符的最长子字符串长度,根据第i个字符是什么,总结规律,得出第i个字符的最长子字符串长度。几个注意点:1.递归用循环代替减少重复计算。解题步骤:先推递归式:一开始没看懂是因为看错...原创 2019-03-17 15:20:16 · 185 阅读 · 0 评论 -
【剑指offer】面试题47:礼物的最大价值
题目描述在m*n的棋盘里每格一个礼物,每个礼物有价值(大于0)。你从棋盘左上角开始拿礼物,并每次往左和下移动一格,直到达到棋盘右下角。问最多拿多少价值的礼物?解题思路:几个注意点:解题步骤:【考点】 递归 动态规划...原创 2019-03-17 01:13:42 · 445 阅读 · 0 评论 -
【剑指offer】面试题45:把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。这一题有个解法,相比于原书上的方法,更好理解、更加简单!有现成的工具当然要用现成的,抵制重复造轮子的行为。解题思路:对整个数组排序,任意mn和nm比较,小的放前面,大的放后面,然后按顺序输出整个数组就...原创 2019-03-16 00:58:29 · 164 阅读 · 0 评论 -
【剑指offer】面试题55:二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路如果只有一个结点,深度为1。如果该结点有左右树,深度就是左右子树的深度的较大值+1。【考点】 树 递归class Solution {public: int TreeDepth(TreeNode* pRoot) { ...原创 2019-03-26 20:21:43 · 116 阅读 · 0 评论