上次面完基础研发后,有个小哥哥问我要不要尝试一下别的岗位,说他会帮我留意一下有没有别的合适的岗位。然后过了几天抖音的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了。
感觉是很特别的一次面试,没怎么问项目一直在做题。就当总结经验了吧。