2024.03.17 西山居【技术训练营】游戏开发笔试复盘

327 阅读3分钟

单项选择:

    1. 计算机图形学:深度测试的作用是什么?
    1. 数据结构:给出二叉树的后序遍历和中序遍历,选择哪个是前序遍历?
    1. 题忘了
    1. 题忘了

多项选择:

    1. 计算机网络:UDP/TCP/IP协议的区别?
    1. 进出栈问题:存在一个有序递增数组1、2、···、n和一个大小为m的栈,顺序进栈随机出栈。例如n = 2,m = 3时,出栈顺序可能是1、2,也可能是2、1。假设n = 7、m = 5,那么出栈顺序可能是?
    1. 操作系统:多线程/多进程基础区别?
    1. 数组和链表,哪种操作数组速度更快?

      A. 返回中间节点     B. 选择随机节点     C. 返回头部     D. 头部插入

    1. 面向对象的三个基本元素?

      A. 多态     B. 抽象     C. 继承     D. 封装

    1. 下列算法中,哪种基于贪心算法?

      A. Prim     B. KMP     C. Floyd-Warshall     D. Dijkstra    

填空:

    1. 求地址:存在一个二维数组array[1...100][1...65](下标从1开始),基地址为10000,且每个元素占2个存储单元。问array[56, 22]的地址是?
  • 存在以下函数,求x(x(8))需要运行多少次x()函数?
int x(int n) {
    if(n <= 3) return 1;
    else {
        return x(n - 2) + x(n - 4) + 1;
    }
}

编程:

1. LeetCode 547.省份数量

有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。

省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。

给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。

返回矩阵中 省份 的数量。

 

示例 1:

输入: isConnected = [[1,1,0],[1,1,0],[0,0,1]]
输出: 2

示例 2:

输入: isConnected = [[1,0,0],[0,1,0],[0,0,1]]
输出: 3

提示:

  • 1 <= n <= 200
  • n == isConnected.length
  • n == isConnected[i].length
  • isConnected[i][j] 为 1 或 0
  • isConnected[i][i] == 1
  • isConnected[i][j] == isConnected[j][i]

2. 字符串组合拼接(暂时没找到原题,但很常见)

存在字符串destStr和字符串数组elements。可以使用elements数组中的元素拼接成完整的字符串destStr,请返回对应的字符串数组索引。

示例 1:

输入:destStr = "dest4sohlywqry", elements[] = {"wqry", "dest4", "sogmhye", "sohly"};
输出:{1, 3, 0}

AC代码:

#include <vector>
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
        vector<int> ans;
        // 遍历元素中所有字符串长度
        int l = 0;
        bool flag = false;
        int count = 0;
        while(!flag) {
            for(int i = 0; i < elements.size(); i ++) {
                // 在不越界的情况下,如果有字符串相等
                if(l + elements[i].length() <= destStr.length() && destStr.substr(l, elements[i].length()) == elements[i]) {
                    ans.push_back(i); // 把字符串放到ansVector里
                    l += elements[i].size();    // 更新最左端指针
                }
            }
            if(l == destStr.length()) flag = true;
        }
        return ans;
    }
};