From 10b17169b1098ac4ce5a622f5ab9be0d2b7d3f42 Mon Sep 17 00:00:00 2001 From: ranwenjie Date: Mon, 2 Aug 2021 15:14:44 +0800 Subject: [PATCH] update questions --- 9 Algorithms Job Interview/2 链表.md | 5 +++ 9 Algorithms Job Interview/4 数值问题.md | 5 +++ 9 Algorithms Job Interview/5 数组数列问题.md | 22 +++++++++++++ 9 Algorithms Job Interview/6 矩阵.md | 25 +++++++++++++++ 9 Algorithms Job Interview/7 二叉树.md | 6 ++++ 9 Algorithms Job Interview/7 树.md | 13 ++++++++ 9 Algorithms Job Interview/8 图.md | 33 +++++++++++--------- 7 files changed, 95 insertions(+), 14 deletions(-) create mode 100644 9 Algorithms Job Interview/7 树.md diff --git a/9 Algorithms Job Interview/2 链表.md b/9 Algorithms Job Interview/2 链表.md index 8cb3f70..1360eb9 100644 --- a/9 Algorithms Job Interview/2 链表.md +++ b/9 Algorithms Job Interview/2 链表.md @@ -52,6 +52,11 @@ struct Node * sort_link_list_increasing_order (Node *pheader): ``` +## 单链表归并排序 + +啥是归并排序? + + ## 给定单链表,检测是否有环。 diff --git a/9 Algorithms Job Interview/4 数值问题.md b/9 Algorithms Job Interview/4 数值问题.md index 558598d..8bbf596 100644 --- a/9 Algorithms Job Interview/4 数值问题.md +++ b/9 Algorithms Job Interview/4 数值问题.md @@ -6,6 +6,11 @@ * 大数问题 +## int转二进 + + + + ## 求1+2+…+n 要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。 diff --git a/9 Algorithms Job Interview/5 数组数列问题.md b/9 Algorithms Job Interview/5 数组数列问题.md index a95ab66..79890a9 100644 --- a/9 Algorithms Job Interview/5 数组数列问题.md +++ b/9 Algorithms Job Interview/5 数组数列问题.md @@ -17,6 +17,18 @@ * 贪心算法或动态规划 + +## 使用归并排序对一个 int 类型的数组排序 + + +比如 [1, 6, 2, 2, 2, 3] + +``` +void sort(int * a, int length) +``` + + + ## 数组中超过出现次数超过一半的数字 题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 @@ -37,6 +49,7 @@ 类似问题:找出数组中唯一的重复元素 + ## 数组中找出某数字出现的次数 在排序数组中,找出给定数字的出现次数。比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 @@ -69,9 +82,18 @@ topMaxK(int *a,int length, int k); 答案就是`二叉堆`。我们可以遍历总量中的每个元素来跟二叉堆中的堆顶元素比较(堆顶元素在`小根堆`中最小值,在`大根堆`中是最大值),这样在0(1)复杂度就可以完成查找操作,揭下来需要的操作就是重新调整推结构,复杂度是O(logk),因此整个操作复杂度是 `O(n*logk)` + `top-k 小的时候用 *大根堆* ,top-k 大得时候用 *小根堆*` +## 找第k大的数 + +比如 1,2,3,4,5,6,7和8这8个数字,低3大的数字是 6 + +``` +int topK(int * a, int length, int k) +``` + ## 最长公共子序列 (动态规划的经典题目) diff --git a/9 Algorithms Job Interview/6 矩阵.md b/9 Algorithms Job Interview/6 矩阵.md index 9b4ed06..fe347cb 100644 --- a/9 Algorithms Job Interview/6 矩阵.md +++ b/9 Algorithms Job Interview/6 矩阵.md @@ -165,3 +165,28 @@ void printArry(int *a,int rows,int columns) + +## 矩阵中的最大上升路径 + +``` +nums = [ + [9,9,4], + [6,6,8], + [2,1,1], +] +``` +返回4, 最长上升路径 [1,2,6,9] ; + +> Google 面试题, 此题采用bfs和拓扑排序均可达到面试官的要求。笔者认为,一般的bfs可以达到hire;记忆化搜索和拓扑排序可以达到strong hire + + + + + + + + + + + + diff --git a/9 Algorithms Job Interview/7 二叉树.md b/9 Algorithms Job Interview/7 二叉树.md index c648fc9..d51391d 100644 --- a/9 Algorithms Job Interview/7 二叉树.md +++ b/9 Algorithms Job Interview/7 二叉树.md @@ -209,6 +209,12 @@ struct TreeNode +## 求一个二叉树中任意两个节点间的最大距离 + +两个节点的距离的定义是 这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。 + + + diff --git a/9 Algorithms Job Interview/7 树.md b/9 Algorithms Job Interview/7 树.md new file mode 100644 index 0000000..957ce48 --- /dev/null +++ b/9 Algorithms Job Interview/7 树.md @@ -0,0 +1,13 @@ +# 树 + + +## 给一棵树 求最大宽度 + + + + +## 树的广度遍历深度遍历 + + + +## 多叉树的层序遍历 diff --git a/9 Algorithms Job Interview/8 图.md b/9 Algorithms Job Interview/8 图.md index f8b18cf..25f22c0 100644 --- a/9 Algorithms Job Interview/8 图.md +++ b/9 Algorithms Job Interview/8 图.md @@ -1,28 +1,33 @@ -31.华为面试题: -一类似于蜂窝的结构的图,进行搜索最短路径(要求5分钟) +深度优先遍历(DFS)和广度优先遍历(BFS) 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode,高频面试题中 -求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边, +## 深度优先遍历 + +深度优先遍历(DFS) + + +## 广度优先遍历 + + +广度优先遍历(BFS) + + + +## 华为面试题:一类似于蜂窝的结构的图,进行搜索最短路径(要求5分钟) + + + +## 求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边, 有向图不再连通,描述算法。 -11、平面上N个点,每两个点都确定一条直线, +## 平面上N个点,每两个点都确定一条直线, 求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。 - -2.求一个有向连通图的割点,割点的定义是, - -如果除去此节点和与其相关的边,有向图不再连通,描述算法。 - - 求一个二叉树中任意两个节点间的最大距离, -两个节点的距离的定义是 这两个节点间边的个数, -比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。 - -