随笔分类 - 《剑指Offer》
做《剑指Offer》时的笔记整理
摘要:这两个都是同一种类型的问题:即斐波那契动态规划问题。 一. 对第一题进行分析 对于这种问题,我们首先得出动态规划的转移方程为:f[n] = f[n-1] + f[n-2],其中 f[0] = 0,f[1] = 1。但是如果我们就这样算,肯定会超出时间限制,因此我们可以用一个数组 dp 来记录算出的斐
阅读全文
摘要:第一次接触二叉树的递归类型的题目。 一般对于这种题目,我们需要做的是:1. 写一个递归方法。 2. 在主方法里调用这个递归方法。 一. 写一个递归方法 对于递归方法,我们可以分为两部分 —— 1. 基本情况 2. 特殊情况。 基本情况实际上就是递归的退出条件,而特殊情况就是进行递归。 对于这个题目,
阅读全文
摘要:对于这种问题,我们第一个需要考虑的问题是:如何对二叉树进行层次遍历。可以使用队列来对二叉树进行层次遍历,先将根结点入队,然后进入while循环,每次出队一个节点进行操作,然后把它对应的左节点和右节点入队(注意顺序不能变)。 然后,我们第二个需要考虑的问题是:怎么样把遍历次数限制在一行内。如果我们不进
阅读全文
摘要:在 剑指 Offer 53 - II. 0~n-1中缺失的数字 中,我们可以把数组分成 左数组和右数组,很明显这道题也可以分成左右数组,但是在那一道题中,我们可以用索引判断元素是在左数组中还是在右数组中,那么这道题该如何判断呢? 声明 left,right 分别为数组的左右两端。m = (left+
阅读全文
摘要:这个题当然可以用遍历的方法,但是我们只要看到递增排序数组,就应该想到用二分法去做。但是这个题跟其它的二分法不是很一样,它没有明确要查找的target 或者左边界,右边界等,而是数组的中间有一个断点。我们可以根据这个断点把数组分为两部分:左数组和右数组,然后我们可以发现,左数组的所有元素的值都和他们的
阅读全文
摘要:很明显,遍历一遍数组,用O(N)的时间复杂度是可以做出来的,但是我们在做这种排序数组的题目中,可以用二分法把时间复杂度降低到O(logN)。 但是我们会发现,正常的二分查找法是查找数组里是否有某个数,那么我们就不能用普通的二分查找,而需要使用二分查找来查找边界。我们可以返回target的右边界(第一
阅读全文
摘要:分析:本题的难点主要就在于:random如何指向一个新的结点。 刚开始的想法就是遍历链表,然后每次生成一个新结点,把对应的属性赋值,然后问题就出现了:我们会发现,random对应的是一个指针,我们如果简单的使用 a.random = b.random 去给新结点进行赋值,就会出现多个指针指向同一个结
阅读全文

浙公网安备 33010602011771号