tplink软件开发工程师面经
总结
tplink面试流程也算是完整走完了,之前在牛客上学习了很多东西,甚是感激.今天我也来分享分享我的面试经历.
tplink的一面和三面都是以聊天为主,面试官主要是会根据简历来问问题,所以建议大家对于写在简历上的内容一定要十分熟悉,做到有话可说.其次面试官也会问成绩,在校经历等问题.
tplink的二面考察了算法题目,这一部分我仔细记录了一下,写在下面,供大家参考.
总的来说这次面试是一次愉快的经历,tp的面试流程推进的非常快,面试官们都很好.最后希望大家也能拿到心仪的offer~
二面
问了简历上的项目
第一题: 2n个数里只有两个数出现一次,其它数都出现了两次,问怎么找到这两个数(leetcode 260)
题解:
class Solution { public: vector singleNumber(vector& nums) { int num1 = 0, num2 = 0; for(auto i : nums){ num1 ^= i; // num1是nums中所有值进行异或的结果 } // 获得上述循环结果的二进制表示最右边的一个1 int mask = num1 == INT_MIN ? num1 : num1 & (-num1); for(auto i : nums){ if(i & mask) num2 ^= i; // 用这个结果进行分类, 可以得到其中一个只出现一次的数 } num1 ^= num2; // 得到另一个只出现一次的数 return vector{num1, num2}; } };
这道题我做过,但是印象不深,简单说了下自己思路.面试官就问: "你做过这道题是吧,那我再考考你,有2n+1个数,里面有三个数出现一次,其它数都出现了两次,怎么找到这三个数?"
这题把我给整不会了,面试官很好,一直在引导我,奈何我自己太菜了,最后也没做出来.后面自己上网查了资料,写了一下.
参考: //https://blog.csdn.net/xiang_yu_pai/article/details/120473969
自己根据博客写的,:
int lowbit(int n){ return n == INT_MIN ? n : n & (-n); } vector findTwosingleNumber(vector& nums) { int num1 = 0, num2 = 0; for(auto i : nums){ num1 ^= i; // num1是nums中所有值进行异或的结果 } int mask = lowbit(num1); // 获得上述循环结果的二进制表示最右边的一个1 for(auto i : nums){ if(i & mask) num2 ^= i; // 用这个结果进行分类, 可以得到其中一个只出现一次的数 } num1 ^= num2; // 得到另一个只出现一次的数 return vector{num1, num2}; } vector singleNumber(vector &nums) { int x = 0; for(auto i : nums){ x ^= i; } int mask = 0; for(auto i : nums) { mask ^= lowbit(x^i); } mask = lowbit(mask); int num1 = 0; vector n23; for(auto i : nums){ if(mask & lowbit(x, i)) num1 ^= i; else n23.push_back(i); } vector result = findTwosingleNumber(n23); result.push_back(num1); return result; }
第二题: 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。(leetcode 424)
这道题只做出了退化的情况(即字符串中只有'0'和'1'),滑动窗口框架算是写出来了,没有想到要用数组记录字符出现的个数这个点.
题解
class Solution { public: int characterReplacement(string s, int k) { vector count(26, 0); int maxCount = 0, left = 0, res = 0; for(int i = 0; i < s.size(); ++i){ ++count[s[i] - 'A']; maxCount = max(maxCount, count[s[i] - 'A']); while(i - left + 1 - maxCount > k){ --count[s[left] - 'A']; ++left; } res = max(res, i - left + 1); } return res; } };#TPLINK春招##春招##面经##C/C++#