# 算法题目汇总

# 合并二维有序数组成一维有序数组,归并排序的思路

公司:头条

分类:算法

答案&解析


# 多种方式实现斐波那契数列

公司:腾讯、CVTE、微软

分类:算法

答案&解析


# 字符串出现的不重复最长长度

公司:腾讯

分类:算法

答案&解析


# 有一堆整数,请把他们分成三份,确保每一份和尽量相等(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 返回a
	输入26返回z
	输入27返回aa
	输入28返回ab
	输入53返回aaa
*/

公司:微软

分类:算法

答案&解析


# Given an int n, output Mausoleum Array solutions.

// Given an int n, output Mausoleum Array solutions.
// Mausoleum Array:
// Construct by 1,1,2,2,3,3,…,n-1,n-1,n,n
// first were non-decreasing (i.e., increasing or remained the same), and then — non-increasing (decrease or remained unchanged).
// Mausoleum Array example:
// [1, 2, 2, 3, 4, 4, 3, 1];
// [1, 1];
// [2, 2, 1, 1];
// [1, 2, 3, 3, 2, 1].
// input/output example:
// n=1, [1,1]
// n=2, [1,1,2,2],[1,2,2,1],[2,2,1,1]
// n = 3,[3, 3, 2, 2, 1, 1],[2, 3, 3, 2, 1, 1],[2, 2, 3, 3, 1, 1],[1, 3, 3, 2, 2, 1],[1, 2, 3, 3, 2, 1],[1, 2, 2, 3, 3, 1],[1, 1, 3, 3, 2, 2],[1, 1, 2, 3, 3, 2],[1, 1, 2, 2, 3, 3]

公司:微软

分类:算法

答案&解析


# 给一个字符串比如'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,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和

公司:头条

分类:算法

答案&解析


# 算法考察:Next Permutation

/* 
  Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
  If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
  The replacement must be in-place, do not allocate extra memory.
  Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
  1,2,3 → 1,3,2
  3,2,1 → 1,2,3
  1,1,5 → 1,5,1
*/

公司:爱范儿

分类:算法

答案&解析


# 按要求实现代码

/* 
  根据传入参数n(数字)对一维数组(纯数字)按照距离n最近的顺序排序。(距离即数字与n的差值的绝对值)
*/
var arr = [7, 28, -1, 0, 7, 33];
function sort(n) {
  // your code
}

公司:高思教育

分类:算法

答案&解析


# 找出两个数组的交集元素

公司:乘法云

分类:算法

答案&解析


# 输入一个整数,输出该数二进制表示中 1 的个数

公司:新东方

分类:算法

答案&解析


# ⽤ js 实现随机选取 10–100 之间的 10 个且不重复的数字,存⼊⼀个数组,还要排序

分类:算法

答案&解析


# 请用算法实现,从给定的无序、不重复的数组data中,取出n个数,使其相加和为sum。并给出算法的时间/空间复杂度。(不需要找到所有的解,找到一个解即可)

function getResult(data,n,sum){
  // your code
}

公司:头条

分类:算法

答案&解析


# 给定⼀个⼤⼩为 n 的数组,找到其中的众数。众数是指在数组中出现次数⼤于 ⌊⌊ n/2 ⌋⌋ 的元素

分类:算法

答案&解析