剑指Offer
文章平均质量分 82
主要介绍了《剑指Offer》系列中常见面试题的题解.
囚蕤
这个作者很懒,什么都没留下…
展开
-
剑指Offer题解面试题解最终章
题解:尽管二叉树没有二叉搜索树那样特殊的性质.但二叉树也可以依靠递归去得到最近公共祖先.首先遍历根节点的左侧和根节点的右侧.如果遍历过程中发现节点是p或q直接返回,如果左右两侧都不为空,说明root即为最近公共祖先,如果一侧为空,一侧不为空说明两个节点在不为空的一侧.题解:二叉搜索树的性质是根节点的左树上的节点的值小于根节点的值,右树上的节点的值大于根节点的值.根据这个特点我们得知两个节点的最近公共祖先的值一定介于两者之间.利用递归求得结果.所以B[i] = lArr[i]*rArr[i]...原创 2022-08-17 22:33:02 · 200 阅读 · 0 评论 -
剑指Offer面试题解总结61~70
题链题解:约瑟夫环.对于n个元素,第一个要删除的数是第m%n个,假设n-1个元素最终剩下的元素的编号是x,那么f[n] = (m%n+x) % n,因此可以通过迭代得到最终结果.i原创 2022-08-17 21:05:18 · 128 阅读 · 0 评论 -
剑指Offer面试题解总结51~60
题链 题解:根据题目我们可以设三个数字分别为2x,3y,5z,然后按照从小到大的顺序更新这三个数字,每次选择三个数字中最小的数字,并让对应的变量加1,假设更新的是2x,那么x+1,其他的同理 这道题的思想其实可以类比合并两个有序数组,只不过这里是三个部分,和有序数组不相同的是这里要保证三个数组中去除掉相等的数字. 第一个只出现一次的字符 题链 题解:根据题意我们记录一个哈希表HashMap记录每个字母出现的次数.然后从前往后遍历数组,找到第一个出现次数为1的字母. 数组中的逆序对 题链 题解:利用归并排序的原创 2022-08-15 23:03:37 · 170 阅读 · 0 评论 -
剑指Offer面试题解总结41~50
题解:这道题的潜规则就是时间复杂度达到O(1).因此我们可以维护两个堆,一个最小堆,一个最大堆,最小堆中存放数组中较大的一半元素,最大堆中存放数组中较小的一半元素.当数组中元素为奇数时,我们规定最大堆中元素个数比最小堆中元素多一个(也可以反过来).这样当两个堆中元素个数相同时,说明数组元素为偶数,就取出两个堆的堆顶元素(位于中间的两个元素)取平均数,否则就取出大堆中的堆顶元素.=0&&num[i-1]*10+num[i]在[0,25]内,f[i]+=f[i-2]....原创 2022-08-11 23:04:34 · 175 阅读 · 0 评论 -
剑指Offer面试题解总结31~40
题解:这道题的难点就是如何去处理random节点.对于next节点和节点的值,我们只需要依次创造新节点去连接起来即可,而我们无法直接让新创建的节点的random指向原链表中的某个节点.解决方法就是用哈希表存储原节点和新节点的映射关系,key是原节点,value是新节点.这样我们就可以通过原节点的random节点映射到对应的新节点.题解:全排列问题(回溯).递归交换两两节点的值.同时为了简单处理不重复的存储,我们选取HashSet来存储每个排列.题解:一道非常经典的回溯题.先序递归遍历....原创 2022-08-07 22:22:35 · 112 阅读 · 0 评论 -
剑指Offer面试题解总结21-30
题解:利用两个指针分别指向数组的首元素和尾元素,尾指针向前遍历遇到奇数停止,并将尾指针指向的奇数赋值给头指针指向的元素;头指针向后遍历遇到偶数停止,并将头指针指向的偶数赋值给尾指针指向的元素,重复这个过程.整个过程类似于。......原创 2022-08-06 21:09:03 · 115 阅读 · 0 评论 -
剑指Offer面试题解总结11-20
题链 题解:经典二分.我们可以将数组中的数字分成两部分,其中每一部分都是升序的,且靠前的一部分中的任意一个元素大于靠后的一部分中的任意一个元素.因此我们可以得出要找的元素是靠后部分的起始元素. 因此我们得到二分策略:每次和数组最右边的元素比较,当查找的元素比右边元素小,r=mid;当查找的元素比右边元素大,l=mid+1;当查找的元素和右边元素相等,r–,之所以r–是因为数组中存在重复元素,因此我们无法判断最小元素是在左侧还是右侧,但能决定的是r下标的元素一定不是最小元素. 矩阵中的路径 题链 题解:典型的原创 2022-08-05 22:45:32 · 193 阅读 · 0 评论 -
剑指Offer面试题解总结1-10
题解:二叉树的题目基本上都是用递归去解决的.根据前序遍历结果我们知道一个子树的根节点,通过中序遍历我们可以知道根节点对应的左树和右树.依据这个特性,我们可以从前向后遍历前序数组,对于前序数组中的每一个值key,寻找其在中序数组中的位置index,index左侧的所有元素为值为key的根节点的子树的左子树,index右侧所有元素为右子树.递归遍历这一部分即可.第2个是递归函数,在函数要构造出子树根节点的值并递归遍历根节点对应的左子树和右子树,第3个是一个辅助函数,查找前序数组中的元素在中序数组中的下标值...原创 2022-08-04 21:35:20 · 141 阅读 · 0 评论