首次前端社招经验总结,大概分算法篇、编程篇、前端技术篇三部分。本次是算法篇的内容。
前言
对于前端来说,算法在面试中所占比例不是很高,题目难度也不是特别大,大部分属于 leetcode 简单题、中等题偏简单题目。对于社招前端而言,手写代码还是以考察实际项目编程为主,这个我们后续再讲。
考察范围也主要以数组、字符串、树为主。在我的面试过程中,也只遇到过一次动态规划类型的题目。
所以大家在准备过程中,针对性的做一些数组、字符串、二叉树的简单、中等题目即可。没有学过动态规划的,可以暂时放弃这部分,免得浪费面试准备时间。
面试过程中遇到的算法题
数组
- 给定一个多重嵌套数组,拍平并去重 (难度:简单)
1 | const arr = [ |
tips: 数组去重的小技巧
1 | const arr = [10, 10, 20, 30, 34, 30] |
- 将两个有序数组合并成一个有序数组 (难度:简单)
1 | - 将两个有序数组合并成一个有序数组 |
- 给定一个数据结构 A,转成树形结构 B (难度:中等)
1 | const A = [ |
字符串
- 实现字符串中单词按数字顺序从小到大排序,比如:(难度:简单)
‘ac23dd rf5 8ee’ -> ‘rf5 8ee ac23dd’
1 | function sortByNum(str) { |
- 把数字
12345
转换成千位分隔符方式12,345
(难度:简单)
1 | // 方法1,从后往前排,3个一组,加逗号 |
一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
例如,”ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。
两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。
输入
“1A2C3D4B56”,”B1D23CA45B6A”
输出
“123456”
说明
“123456”和“12C4B6”都是最长公共子序列,任意输出一个。
1 | // 动态规划 |
二叉树
1 | function findCommonAncestor(root, nodeA, nodeB) { |
- 二叉树的广度优先遍历 (难度:中等)
1 | /** |
其他
- 随机从数组中取 5 个人,每次都跟前一次不一样 (难度:简单)
1 | function randomPick(arr, count) { |
此题为 leetcode 会员解锁,解题思路可参考这里
1 | // nums存放数字 |
tips: 题目有点难,可以先完成这两道题基本计算器和基本计算器 II做练习
- 顺时针打印矩阵 (难度:简单)
1 | const arr = [ |
- 判断一个点是否在三角形内部 (难度:中等)
该题主要用到数学知识