Skip to content

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

@NsNe

Description

@NsNe

面试算法题

一面算法

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions