# 算法

- 合并二维有序数组成一维有序数组,归并排序的思路
- 多种方式实现斐波那契数列
- 字符串出现的不重复最长长度
- 有一堆整数,请把他们分成三份,确保每一份和尽量相等(11,42,23,4,5,6 4 5 6 11 23 42 56 78 90)
- 输入一条 polyline,输出 polyline 的中点
- 单向链表实现队列
- 将给定的数组从顶级分类递归查找子分类,最终构建一个树状数组
- 实现一个将 52 张牌随机均等的分给四个人,比如输入 [0,1,2,3....51] ,输出[[1,2,16...],[4,3,6..],[....],[....]]
- 按要求实现 rightView 函数
- 二叉树序列化反序列化
- 输入一个数字,找到对应的字母
- 给一个字符串比如'abca',返回第一个不重复的字母
- 给定⼀个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效.
- 手动实现一个函数,给定一个数组[1,0,2,3,4,-1,-3],输出任意两个值和为 0 的下标
- 介绍排序算法和快排原理
- 一个人每次只能走一层楼梯或者两层楼梯,问走到第 80 层楼梯一共有多少种方法
- 给定一个数组,形如 [1, 1, 2 , 3, 3, 3, 3, 4, 6, 6],给定一个数 n,例如 3,找出给定的数 n 在数组内出现的次数,要求时间复杂度小于 O(n)
- 现在有随机整数数组,例如[2,11,20,160,3,1...],请挑出数组内,三个随机整数和为 100 的所有数据。
- 统计一组整形数组的最大差值?
- 介绍冒泡排序、选择排序,说说冒泡排序如何优化
- 如何判断链表是否有环
- 介绍二叉搜索树的特点
- 手写数组去重函数(至少三种以上,说明时间复杂度)
- 找到前 K 个最大的元素
- 介绍下 DFS 深度优先
- 递归公式的时间复杂度为?(单选题)
- 用 JavaScript 实现一个标准的排序算法(快排、冒泡、选择排序),对某个数字数组进行由低到高的排序。
- 找出“aaaabbcccdddd”字符串中出现最多的字母?
- 求 n 以内的所有素数,并说明时间复杂度
- 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点
- 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和
- 根据传入参数 n(数字)对一维数组(纯数字)按照距离 n 最近的顺序排序。(距离即数字与 n 的差值的绝对值)
- 找出两个数组的交集元素
- 输入一个整数,输出该数二进制表示中 1 的个数
- ⽤ js 实现随机选取 10–100 之间的 10 个且不重复的数字,存⼊⼀个数组,还要排序
- 请用算法实现,从给定的无序、不重复的数组 data 中,取出 n 个数,使其相加和为 sum。并给出算法的时间/空间复杂度。(不需要找到所有的解,找到一个解即可)
- 给定⼀个⼤⼩为 n 的数组,找到其中的众数。众数是指在数组中出现次数⼤于 ⌊⌊ n/2 ⌋⌋ 的元素
# 合并二维有序数组成一维有序数组,归并排序的思路
# 多种方式实现斐波那契数列
# 字符串出现的不重复最长长度
# 有一堆整数,请把他们分成三份,确保每一份和尽量相等(11,42,23,4,5,6 4 5 6 11 23 42 56 78 90)
# 输入一条 polyline,输出 polyline 的中点
算法:输入一条 polyline,输出 polyline 的中点 绘制:在浏览器中绘制出 polyline 和中点 说明:中点是指沿着 polyline,到 polyline 的起点和终点,距离相等,中点要求在 polyline 上 输入:[[10, 20], [20, 200], [30, 220], [40, 300], [100, 400]],以[10, 20]举例,10 代表 x 坐标,20 代表 y 坐标,单位是像素 要求:提供源代码,用原生 JavaScript 实现,不使用任何框架、类库、构建工具,本地打开 html 文件可直接看到效果
# 单向链表实现队列
# 将给定的数组从顶级分类递归查找子分类,最终构建一个树状数组
数组:[{id:1, parentId: 0}, {id:2, parentId:1},{id:3, parentId:1}] 输出结果:[{id:1, parentId: 0,children:[{id:2, parentId:1},{id:3, parentId:1}]}] 说明:parentId 为 0 的是根节点
# 实现一个将 52 张牌随机均等的分给四个人,比如输入 [0,1,2,3....51] ,输出[[1,2,16...],[4,3,6..],[....],[....]]
# 按要求实现 rightView 函数
function TreeNode(val){
this.val = val;
this.left = null;
this.right = null;
}
function rightView(root){
// 请你实现
}
// => [1,4,3]
1 => 1
2 4 => 4
7 3 => 3
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 二叉树序列化反序列化
# 输入一个数字,找到对应的字母
如输入1 返回a
输入26返回z
输入27返回aa
输入28返回ab
输入53返回aaa
# 给一个字符串比如'abca',返回第一个不重复的字母
# 给定⼀个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效.
有效字符串需满⾜: 1. 左括号必须⽤相同类型的右括号闭合。 2. 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输⼊: "()" 输出: true 示例 2: 输⼊: "()[]{}" 输出: true 示例 3: 输⼊: "(]" 输出: false 示例 4: 输⼊: "([)]" 输出: false 示例 5: 输⼊: "{[]}" 输出: true
# 手动实现一个函数,给定一个数组[1,0,2,3,4,-1,-3],输出任意两个值和为 0 的下标
# 介绍排序算法和快排原理
# 一个人每次只能走一层楼梯或者两层楼梯,问走到第 80 层楼梯一共有多少种方法
# 给定一个数组,形如 [1, 1, 2 , 3, 3, 3, 3, 4, 6, 6],给定一个数 n,例如 3,找出给定的数 n 在数组内出现的次数,要求时间复杂度小于 O(n)
# 现在有随机整数数组,例如[2,11,20,160,3,1...],请挑出数组内,三个随机整数和为 100 的所有数据。
# 统计一组整形数组的最大差值?
# 介绍冒泡排序、选择排序,说说冒泡排序如何优化
# 如何判断链表是否有环
# 介绍二叉搜索树的特点
# 手写数组去重函数(至少三种以上,说明时间复杂度)
# 找到前 K 个最大的元素
# 介绍下 DFS 深度优先
# 递归公式的时间复杂度为?(单选题)
A.O(n) B.O(logn) C.O(nlogn) D.O(n2)
# 用 JavaScript 实现一个标准的排序算法(快排、冒泡、选择排序),对某个数字数组进行由低到高的排序。
# 找出“aaaabbcccdddd”字符串中出现最多的字母?
# 求 n 以内的所有素数,并说明时间复杂度
# 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点
# 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和
# 根据传入参数 n(数字)对一维数组(纯数字)按照距离 n 最近的顺序排序。(距离即数字与 n 的差值的绝对值)
var arr = [7, 28, -1, 0, 7, 33]
function sort(n) {
// your code
}
1
2
3
4
2
3
4