剑指offer 面试题40. 最小的k个数(易) 海量数据Top-K问题,要了解从 \(O(nlog_{2}n)\) 到 \(O(n)\) 的多种方法。如果面试时遇到的面试题有多种解法,并且每种解法都各有优缺点,那么我们要向面试官问清楚题目的要求、输入的特点,从而选择最合适的解法。 2020-05-11 剑指offer 二分查找和搜索 图与堆
剑指offer 面试题39. 数组中出现次数超过一半的数字(易)& LeetCode 169. 多数元素(易) 看到这道题,很多应聘者就会想要是这个数组是排序的数组就好了。 如果是排好序的数组,那么我们就能很容易统计出每个数字出现的次数。题目给出的数组没有说是排序的,因此我们需要先给它排序。排序的时间复杂度是\(O(nlogn)\)。最直观的算法通常不是面试官满意的算法,接下来我们试着找出更快的算法,空间复杂度更小的算法。 2020-05-10 LeetCode 剑指offer 数组与指针 二分查找和搜索
面试题37. 序列化二叉树(难)& LeetCode 297. 二叉树的序列化与反序列化(难) 序列化就是广度优先遍历,反序列化就是构造二叉树。 2020-05-10 LeetCode 剑指offer 树
面试题36. 二叉搜索树与双向链表(中)& LeetCode 426. 将二叉搜索树转化为排序的双向链表(中) 我们可以把树分为3部分:根节点、左子树和右子树,然后把左子树中最大的节点、根节点、右子树中最小的节点链接起来。至于如何把左子树和右子树内部的节点链接成链表,那和原来的问题的实质是一样的,因此可以递归解决。解决这个问题的关键在于把一个大的问题分解成几个小问题,并递归地解决小问题。 2020-05-10 LeetCode 剑指offer 树 分治算法 链表