Skip to content

剑指 Offer 记录

这是毕业找工作时看《剑指 Offer》的记录,记录一下有帮助的题目。

面试题11:旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5, 1,2}为{1,2, 3, 4, 5}的一个旋转,该数组的最小值为1。

思路

二分。如何判断是否要继续看子数组,看首尾的大小关系。

面试题49:丑数

我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如,6、8都是丑数,但14不是,因为它包含因子7。

思路

我感觉非常好的题目,这本书印象最深的题目。这个视频讲的很好:https://b23.tv/oVSKYjM

文字说明:定义数组 \(dp\),其中 \(dp[i-1]\) 表示第 \(i\) 个丑数,定义 \(3\) 个指针 \(p_2\), \(p_3\)\(p_5\),表示下一个丑数是当前指针指向的丑数乘以对应的质因数。初始时,三个指针的值都指向 \(dp[0]\)。更新 \(dp[i]=\min(dp[p_2] \times 2, dp[p_3] \times 3, dp[p_5] \times 5)\),然后分别比较 \(dp[i]\)\(dp[p_2] \times 2\), \(dp[p_3] \times 3\), \(dp[p_5] \times 5\) 是否相等,若是,则对应的指针加 \(1\)

面试题23:链表中环的入口节点

如果一个链表中包含环,如何找出环的入口节点。

思路

标准的快慢指针应用。放在这里也是提醒一下快慢指针这个东西。设置快慢指针,快指针每次走一步,慢指针每次走两步,假如链表中有环,它们一定在环中相遇。

Comments