最近去Linglei远程中介平台注册,笔试完跟大家分享一下

背景介绍,领类是一家中介性质的开发工程师入驻平台,据说是可以零手续费提供职位,于是我想着去面试试试

  • 起因
  • 填写资料
  • 面试题
  • 面试结果
  • 俺很强,俺也要报名!

起因

这家公司直接往我邮箱里发了邀请链接,估计是通过领英招聘平台看到我的联系方式吧,因为之前也注册过类似的平台,于是本着产品经理多多体验新品的想法,亲自前往试炼,没想到自认经验丰富的我,也会在后续笔试遭遇滑铁卢。

填写资料

在上面填写资料时,发现工作经历这一块会报错无法保存,于是只能直接跳过。

面试题

刚来就上笔试,开场就是算法题,还是我没遇到过的:

给定一个由n个整数组成的数组arr,将数组划分为k个连续非重子数组,使得每个元素属于且仅属于一个子数组,并且每个子数组至少包含一个元素。划分数组以使其美丽度最小。
注意 : 子数组是数组的连续子段
示例
考虑n = 4, arr = [1, 2, 3, 4]和k = 2
使用基于1的索引,展示了每种可能的分割的美丽程度
[1和[2, 3, 4]:分数分别为 1 * 1 = 1 和34 = 12。数组的美丽程度为max(1.12) = 12。
[1, 2和[3, 4]:: 分数分别为 2 * 2 = 4 和24 = 8。美丽程度为 max(4, 8) = 8。
[1, 2, 3和[4]::分数分别为 3 * 3 = 9 和14 = 4。美丽程度为max(9, 4) = 9.
所以,数组的最小可能美丽程度为8.
根据此情况实现函数GetMinimumBeauty,该函数将提供两个参数,数组arr和值k,要求返回最小的美丽度。

我题没看懂就开始瞎写,等写完才发现好像和我想象的完全不同,重新理解一遍后才发现是需要动态规划来解决的,可是我之前写过的动态规划都单纯只是要求计算结果,没遇过这种求数组分组形式的,于是总共耗时20分钟硬是没解决。

后续笔试结束后分享题目给了友人,友人很快就给了他的C++版答案,但没有使用动态规划必备的优化方式——预存子结果,于是我根据友人提供的答案进行抄袭改进:

int GetMinimumBeauty(std::vector<int>& arr, int k, int left, int right, std::unordered_map<std::string, int>& beauties)
{
	std::stringstream b_key_stream;
	b_key_stream << k << "," << left << "," << right;
	std::string b_key = b_key_stream.str();
	if (beauties.contains(b_key))
	{
		return beauties.at(b_key);
	}
	auto result_handle = [&](int beauty) -> int {
		beauties.emplace(b_key, beauty);
		return beauty;
		};
	if (left == right)
		return result_handle(arr[left]);
	if (k == 1) {
		int val = 0;
		for (int i = left; i <= right; ++i)
			val = std::max(val, arr[i]);
		return result_handle(val * (right - left + 1));
	}
	int beauty = INT_MAX;
	for (int i = left; i <= right - k + 1; ++i)
	{
		beauty = std::min(beauty, std::max(GetMinimumBeauty(arr, 1, left, i, beauties), GetMinimumBeauty(arr, k - 1, i + 1, right, beauties)));
	}
	return result_handle(beauty);
}
int GetMinimumBeauty(std::vector<int>& arr, int k, int left, int right) {
	std::unordered_map<std::string, int> beatuies{};
	return GetMinimumBeauty(arr, k, left, right, beatuies);
}
int GetMinimumBeauty(std::vector<int>& arr, int k)
{
	return GetMinimumBeauty(arr, k, 0, arr.size() - 1);
}

void TestGetMinimumBeauty()
{
	std::vector<int> arr{ 1,2,3,4 };
	std::clock_t start_time = clock();
	int result = GetMinimumBeauty(arr, 2);
	std::clock_t end_time = clock();
	std::cout << result << ", time: " << end_time - start_time << std::endl;
}

面试结果

当然是失败啦,因为没有完成笔试,得分只有不到20分,要求是得80分才能通过。
收到官方的面试失败邮件通知时,我内心是有点想笑的,因为这邮件的措辞就是经典的话术——
虽然你没有通过笔试,但不代表否认你的能力与绩效。
回想网站上连工作经历都有bug无法正常填写时,就感觉我确实没什么好在乎的,单纯对题目本身的懵逼让我无法忘怀,于是才写下这篇文章作为记录。

俺很强,俺也要报名!

如果大家也想着试试这种远程工作的话,可以尝试领类等支持远程办公的平台:
领类平台官网

你可能感兴趣的:(编程,算法,求职招聘,远程工作)