字节跳动抖音后端


上次面完基础研发后,有个小哥哥问我要不要尝试一下别的岗位,说他会帮我留意一下有没有别的合适的岗位。然后过了几天抖音的HR就联系我了,面试约在了周一。一共是三次面试吧,感觉和之前的风格完全不同,这里主要记录一下他出的题。好像在leetcode上面找不到。

能否蓄水

给定一个矩阵,他的值表示高度。然后在输入x, y, h。x表示横坐标,y纵坐标,h表示将这个点装水到高度h,然后问是否能维持。假设矩阵外面的高度为0。

典型的DFS,从x, y处开始dfs,如果高度 < h就继续搜索,直到搜索到大于等于h或者到边界。

class Solution{
bool result = true;

public:

};

注意一下参数最好用引用,然后注意一下代码规范。还有const之类的。这里应该可以在原矩阵改的。

拓扑排序

给定一个列表,里面有一个任务id以及其对应的依赖任务的idlist,任意返回一个有效的任务序列。

这里他也是要我注意一下参数的问题

带权随机数

当时头晕,想了半天,其实不应该选今天面试的。其实就是个很简单的题。
给定一个权重列表[w0, w1, w2, …, wn-1],按照权重返回0~n-1的随机数。

class Solution
{

public:
  int getRand(vector<int> weights)
  {
    vector<int> nums;
    for(int i = 0; i < weights.size(); ++i)
    {
      for(int j = 0; j < weights[i]; ++j)
        nums.push_back(i);
    }

    return nums[rand() % nums.size()];
  }
};

感觉可能错的地方太多了,所以他也没怎么帮我改了。这种写法时间复杂度是sum(weights),空间复杂度也是sum(weights)。感觉空间应该是可以省的。
用C++答题尽量还是写一个类,这里的代码规范也没弄好,不然有全局变量之类的问题,用类的话可以给你隐藏很多东西,省去很多麻烦。结果还在这里被diss了。

感觉是很特别的一次面试,没怎么问项目一直在做题。就当总结经验了吧。


Author: 蒋璋
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source 蒋璋 !