岗位
游戏客户端开发
试卷类型
西山居2024春招技术开发D卷
题目分配
4 道单选,6 道不定项,2 道填空,2 道编程,1 道问答
作答时间
120 分钟
做题感受
题目类型较为丰富,难度中等偏低,主要考察数据结果,其他部分较少
编程题整体较为简单
第一题并查集
给你一个 $n*n$ 的邻接矩阵,描述的是有 $n$ 个节点的无向图,求该无向图里有多少个联通图。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63class Node
{
public:
int id;
Node* next;
Node(int id) :id(id)
{
next = this;
}
Node* head()
{
Node* temp = next;
while (temp->next != temp)
{
temp = temp->next;
}
return temp;
}
void join(Node* node)
{
if (node == this)
return;
head()->next = node->head();
}
};
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 统计岛群数量
* @param connectedArray int整型vector<vector<>> 小岛连接关系
* @return int整型
*/
int getIsLandGroupCount(vector<vector<int> >& connectedArray) {
int n = connectedArray.size();
if (n <= 1)
return n;
vector<Node*> vec(n);
for (int i = 0;i < n;++i)
{
vec[i] = new Node(i);
}
for (int i = 0;i < n;++i)
{
for (int j = i + 1;j < n;++j)
{
if (connectedArray[i][j] == 1)
{
vec[j]->join(vec[i]);
}
}
}
unordered_set<int> set;
for (auto& node : vec)
{
set.insert(node->head()->id);
}
return set.size();
}
};第二题 DFS
给你一个目标字符串和一个字符串数组,你需要用该数组内的元素拼成该目标字符串(元素可以重复使用)返回一个数组数组表示拼接顺序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回使用 elements 内容拼接成 destStr 的组合方案
* @param destStr string字符串 需要拼接目标字符串
* @param elements string字符串vector 用于拼接的元素列表,允许重复使用同一元素
* @return int整型vector
*/
vector<int> StringAssemble(string destStr, vector<string>& elements) {
// write code here
return dfs(destStr, 0, elements);
}
vector<int> dfs(const string& destStr, int curIndex, vector<string>& elements)
{
if (curIndex == destStr.size())
return {};
vector<int> ans;
int index = 0;
for (const string& s : elements)
{
int size = s.size();
if (curIndex + size <= destStr.size())
if (destStr.substr(curIndex, size) == s)
{
vector<int> ret = dfs(destStr, curIndex + size, elements);
if (ret.size()==0 ||ret[ret.size() - 1] != -1)
{
ans.push_back(index);
for (auto& i : ret)
ans.push_back(i);
return ans;
}
}
index++;
}
return { -1 };
}
};
int main()
{
Solution s;
vector<string> elements = { "4395", "e9", "e903", "cebd" };
vector<int> ans = s.StringAssemble("e9cebd4395", elements);
return 0;
}问答题比较有意思,是给了一个种田游戏的玩法,然后让你从程序的角度去看写一些系统、类、函数,以及如果地块很大的优化思路。