虾皮笔试 虾皮笔试题 0402

笔试时间:2025年04月02日

历史笔试传送门:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

题目:分割等和数组

给定一个只包含正整数的非空数组 nums,判断该数组是否可以被分割成两个子集,使得两个子集的元素和相等。

样例输入

[1,5,11,5]

样例输出

true

参考题解

*******************************************************************************

第二题

题目:二叉树遍历

给你一个全部节点是正整数的二叉树,逐层的从左到右访问所有节点,输出为一个二维数组;注:# 代表该节点没有值

样例输入

{5,20,11,#,7}

样例输出

[[5],[20,11],[7]]

参考题解

二叉树的层序遍历,直接bfs即可。

第三题

题目:艾尔罗大迷宫

设计一个迷宫游戏系列艾尔罗,在设计初期为了方便,使用n*n矩阵表示.0代表可到达区域,1表示不可到达区域.例如有:[[0, 1, 0, 0][0, 0, 0, 0][0, 1, 0, 1][0, 0, 1, 0]]在这个例子中,因为map[3] [2] = 1和map[2] [3] =1.所以相对于起点map[0] [0]来说,map[3] [3]的位置是不可达的(只允许左右上下移动).为了方便评估设计的艾尔罗迷宫的难易程度,需要有一个方便的算法统计每个迷宫不可到达的网格有多少个.比如上面的不可达区域为4个原生不达的区域加上1个衍生的map[3] [3].总数为5.约束:起点统一定义为[0,0].给定的迷宫二维数组矩阵形式是n*n,且[0,0]也总是可达(值为0),原生不可达的用值1表示。

样例输入

[[0,1,1,0],[1,0,0,0],[0,1,0,1],[0,1,1,0]]

样例输出

15

说明:[0,0]被困,所以都不可达。

参考题解

统计原生障碍数量:遍历二维矩阵,统计所有值为1的元素数量。广度优先搜索(BFS)标记可达区域:从起点[0,0]出发,使用BFS遍历所有可达的0区域,并标记已访问的位置。计算不可达的0区域:遍历整个矩阵,统计所有未被访问且值为0的元素数量。总不可达数:原生障碍数 + 不可达的0区域数。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

class Solution {
public:
    int apply(vector<vector<int>>& generated_map) {
        int n = generated_map.size();
        vector<vector<bool>> visited(n, vector<bool>(n, false));
        queue<pair<int, int>> q;
        q.push({0, 0});
        visited[0][0] = true;

        // 定义四个方向
        vector<pair<int, int>> directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};

        while (!q.empty()) {
            auto [x, y] = q.front();
            q.pop();
            for (auto [dx, dy] : directions) {
                int nx = x + dx;
                int ny = y + dy;
                if (nx >= 0 && nx < n && ny >= 0 && ny < n) {
                    if (!visited[nx][ny] && generated_map[nx][ny] == 0) {
                        visited[nx][ny] = true;
                        q.push({nx, ny});
                    }
                }
            }
        }

        // 统计障碍物数量
        int count_ones = 0;
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < n; ++j)
                if (generated_ma

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务