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++#