Shopee2022届校园招聘提前批笔试
岗位:Android开发工程师单选题和多选题:C++基础(引用与指针、const)操作系统(进程与线程、并发)数据结构(二叉树的前中后序遍历、栈、链表)计算机网络(TCP、OSI模型)编程题:(AC 20’)第一题:最大整数值给定一个正整数数组,用其中的整型数字组成最大的整型值。class Solution {public:/*** Note: 类名、方法名、参数名已经指定,请勿修改*** 最大正
·
岗位:Android开发工程师
单选题和多选题:
- C++基础(引用与指针、const)
- 操作系统(进程与线程、并发)
- 数据结构(二叉树的前中后序遍历、栈、链表)
- 计算机网络(TCP、OSI模型)
编程题:
- 第一题:最大整数值
给定一个正整数数组,用其中的整型数字组成最大的整型值。
class Solution {
public:
/**
* Note: 类名、方法名、参数名已经指定,请勿修改
*
*
* 最大正整数
* @param arrs int整型vector 正整数数组
* @return int整型
*/
int maxIntValue(vector<int>& arrs) {
// write code here
long long ret = 0;
int i = arrs.size() - 1;
sort(arrs.begin(), arrs.end());
while (i >= 0) {
ret = ret * 10 + arrs[i];
i--;
}
return ret;
}
};
- 第二题:和
leetcode 572.
另一个树的子树类似,但不完全一致。
此题题目给出了限定,空树不是任何树的子树,所以子树为空的情况,要返回false
。在进入dfs
的地方如果右树为空,直接返回false
。
利用572
题的思路完成代码,测试用例已经可以通过70%,剩下的30%就要考虑到此题允许右树是左树的一部分,这部分的最后一层在左树中不必完全是叶子结点。
例如这个测试用例:
572
题要求返回false
,但是本题就会要求返回true
。
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
/**
* Note: 类名、方法名、参数名已经指定,请勿修改
*
*
*
* @param tree1 TreeNode类
* @param tree2 TreeNode类
* @return bool布尔型
*/
bool IsSubtree(TreeNode* tree1, TreeNode* tree2) {
// write code here
return dfs(tree1, tree2);
}
bool check(TreeNode* o, TreeNode* t) {
if (t == nullptr) return true;//卡在70%的用例通过卡了好久,最后是这里,返回true的情况,左树不一定需要到叶子节点,o不需要也为nullptr。
if ((o == nullptr && t != nullptr)
|| o->val != t->val)
return false;
return check(o->left, t->left) && check(o->right, t->right);
}
bool dfs(TreeNode* o, TreeNode* t) {
if (t == nullptr || o == nullptr) return false;
return check(o, t) || dfs(o->left, t) || dfs(o->right, t);
}
};
- 第三题:最长连续的子串
求输入字符串中只包含一个字符的最长的连续子串,字符大小写同等看待,最长连续的子串长度都为1时,默认返回字符串中的第一个字符。
示例:
输入
s = “ssssssssssssssshhhhopeeeeeeee”
输出
sssssssssssssss
class Solution {
public:
/**
* Note: 类名、方法名、参数名已经指定,请勿修改
*
*
*
* @param str string字符串 1 <= str.length <= 1000
* @return string字符串
*/
string findLongestSubstr(string str) {
// write code here
string subs = str.substr(0, 1); //一定要为返回值赋初值
char cur = str[0];
int left = 0, right = 0, count = 1, maxCount = 1;
for (int i = 1; i < str.size(); i++) {
if (str[i] == cur || abs(str[i] - cur) == 32) {
right = i;
count++;
}
else {
cur = str[i];
left = i;
right = i;
count = 1;
}
if (count > maxCount) {
maxCount = count;
subs = str.substr(left, right - left + 1);
}
}
return subs;
}
};
更多推荐
已为社区贡献2条内容
所有评论(0)