NsNe / blog

4 stars 0 forks source link

拼多多技术面试算法题 #16

Open NsNe opened 3 years ago

NsNe commented 3 years ago

面试算法题

一面算法

经常会遇到后端传给我的是一个拍平的树结构,将这样的结构,转为树结构,可以用于类似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. 编码与运行,总结分析时间复杂度与空间复杂度