面试算法题

一面算法

常常会遇到后端传给我的是一个拍平的树结构,将这样的构造,转为树结构,能够用于相似cascader
例:

输出:const data = [  {    parent: 3,    id: 4,    value: 4,  },  {    parent: null,    id: 1,    value: 1,  },  {    parent: 1,    id: 2,    value: 2,  },  {    parent: 1,    id: 3,    value: 3,  }];输入:[  {    id: 1,    value: 1,    children: [      {        id: 2,        value: 2,      },      {        id: 3,         value:3,        children: [          {            id: 4,            value: 4,          }        ]      }    ]  }];

实现思路:

  • 先找到根节点
  • 再从根节点递归找其孩子

二面算法

在一个一维坐标,给出一个指标线段,例如(3, 8)。一组源线段,例如(1, 2),(3, 4), (5, 8), (3, 6)。判断源线段组成的合集是否能齐全笼罩指标线段,返回 true 或 false

输出:const data = [3, 8];const source = [[1, 2], [3, 4], [5, 8], [3, 6]];输入:true

实现思路: 次要是如何将源线段合并

  • 先将源线段依据起始点排序
  • 再去遍历源线段,每次通过下一个线段的终点与以后起点比拟,判断是否又交加,如果有,则合并,如果没有,阐明是离开的线段
  • 遍历合并后的源线段,判断是否齐全蕴含指标线段

三面算法

合并两个有序数组,并逆序。
作答: 参考leet code 88 题

总结

一面算法题,和三面算法题很快就写进去了,二面的算法题,也是让面试官给了些提醒才堪堪写进去。
在面试过程中,遇到算法题,不要慌乱。上面几步帮你搞定算法:

  1. 首先搞清楚题目的含意,确定输入输出。和面试官确认题目了解没有错
  2. 整顿本人的思路,向面试官解说一下,思路大体没有问题,再开始编码
  3. 即便没有思路,也不要心慌,或者就不做了,能够笑着让面试官给点提醒
  4. 依照提醒思考,再反复步骤2
  5. 编码与运行,总结剖析工夫复杂度与空间复杂度