刚刚美团测开(实习)一面,面试官小姐姐给我出的算法题就是这道《两数之和》,太经典了。然而我调试了20分钟,愣是没做出来,耻辱下播。反思为什么做了无数遍的题,关键时刻会掉链子。
题目与代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hash;
int n = nums.size();
for (int i = 0; i < n; i ++ )
{
if (!hash.count(target - nums[i])) hash[nums[i]] = i;
else return {i, hash[target - nums[i]]};
}
return {};
}
};
本来看到这题目我眼睛都笑歪了,确实没什么好说的,但是我现场写太快了,题目也没看完,写的时候关键步骤错写成了下面这样:
for (int i = 0; i < n; i ++ )
{
if (hash.count(target - nums[i]))
return {i, hash[target]}; //老瞎眼了
hash[nums[i]] = i;
}
面试官也是开摄像头的,我老是盯着她看(搞得我更紧张了)。一次提交没AC,紧张得不行,半天没调试出来,然后面试官给我说仔细看题目!题目有要求需要按照下标从小到大输出,而且输出的下标要从1开始(不仔细读题的下场),被批不细心。
正解应该是下面这样,后面到时间了,没做完就结束面试了。。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hash;
int n = nums.size();
for (int i = 0; i < n; i ++ )
{
if (hash.count(target - nums[i]))
{
if (i < hash[target] - nums[i])
return {i + 1, hash[target - nums[i]] + 1};
else
return {hash[target - nums[i]] + 1, i + 1};
}
hash[nums[i]] = i;
}
return {};
}
};
总结:一定要仔细读题,随便看一眼题就直接上手打代码会让面试官觉得不细心,有时候以为是原题,其实细节上有改动,还有就是一定要放松😂
代码没调出来还敢偷看小姐姐~
我错了😂
慢慢积累面试经验, 现在很多都是视频面试, 更不用紧张了
是啊,还是面得太少,太慌了😭
慢慢来. 建议先投一些小公司, 多历练历练, 面个3-5次, 经验有了, 再去投心仪的公司