剑指Offer复盘(七)——面试中的各项能力

面试中的能力

写了一半了,不小心退出了。md难受心累,不想写了。

面试题53

二分查找区间的左右端点。有时需要利用索引和储存元素的关系设计二分方法。

面试题54

BST第k大,进行中序遍历即可。

面试题55

二叉树的深度,递归求解即可。求平衡二叉树需要注意一下,利用后序遍历可以减少重复访问树节点的代价。

面试题56

数组中数字出现次数。异或运算,位运算的使用只能背下来。

面试题57

和为s的数字,由于原数组排序,因此可以使用双指针两端查找的办法进行。题目的延伸将两个数字修改为连续的一个区间,并且需要输出所有这些符合要求的区间。直觉上应该是一个滑动窗口的题目。套模版双while循环。

面试题58

反转字符串。需要注意的是仅反转单词顺序,不反转单个单词。因此可以考虑使用stringstream来处理整个字符串,先读取单个单词,之后连接起来。如果不这样做,按照书中的方法,可以先把整个字符串全部反转,之后使用扫描空格的方法再区分每个单词,把每个单词转回去。

题目的延伸是对字符串左旋转。可以利用之前的思路,把两部分各自反转,之后整体反转,考察了问题迁移的能力。

面试题59

队列最大值,单调队列标准题目。需要注意的是要用deque双端队列容器实现(保持单调性的操作需要pop_back,队头最大值出队需要pop_front)。

面试题60

 从本题开始,主要讲的是抽象思维/发散思维能力,其实与算法基础知识和时间复杂度优化等内容的关系不是太大,主要考察的是如何选取数据结构/算法/递归形式描述建模问题,一旦找到了这个对应关系,求解就相对容易,否则的话不太好想。

本题主要是解决扔骰子的结果问题,可以按照dp创建数组的思路,逐层算条件概率。最后一层就是要的答案。

面试题61

扑克牌的顺子,首先要充分理解这个概念,顺子的概念显然和连续的有序数据有关。之后想到利用排序使得数据有序,然后处理特殊情况:大、小王可以补充作为任何一个数字

面试题62

约瑟夫环问题,非常经典的数据结构题目。使用链表模拟和使用递推形式求解都应该记住。

面试题63

股票利润问题,暴力的做法为O(n^2),可以采取记录出现的最小值的方法,使得一次遍历得到最终结果。

面试题64

不用XXX操作求等比数列,可以采用创建数据结构,然后计算占用字节数的方法。

面试题65

不用加减乘除做加法,可以使用位运算处理进位。用与运算&检查是否出现进位,用异或运算完成求和,需要用一个while循环处理,直到不再出现进位的情况。

面试题66

构造乘积数组,不能使用除法。显然暴力计算结果为O(n^2),可以考虑乘积数组中每个元素之间的对应关系,每个元素可以分成两部分(i之前,i之后),每部分都是利用上一部分作乘法推导出来的。然后问题就解决了,这也算是空间换时间的思想的应用。

 

posted @ 2020-08-01 10:48  haydenhs  阅读(88)  评论(0)    收藏  举报