西山居笔试 西山居笔试题 0414

笔试时间:2024年04月14日

历史笔试传送门:2023秋招笔试合集

第一题

题目:岛群统计

某个市有n座小岛,部分彼此相连。其中,如果小岛a与小岛b直接相连,小岛b又小岛c相连时,我们认为小岛a与小岛c间接相连。我们规定,岛群是相连(直接或者间接)相连小岛的集合,其中不包含没有相连的小岛;你是这个市的市长,想将这些小岛划分为岛群管理,现在需要统计岛群的数量。

补充说明

给你—个n*n的矩阵connectedArray, 其中connectedArray[i][j]=1表示第i个小岛和第j个小岛直接相连,而connectedArray[il[j]=0表示不直接相连, 返回connectedArray中岛群的数量。

样例输入一

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

样例输出一

2

样例输入二

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

样例输出二

3

参考题解

无向图中有几个连通块,可以使用DFS、BFS、或者并查集。

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

class Solution {
public:
    int getIsLandGroupCount(vector<vector<int> >& a) {
        int n = a.size();
        vector<bool> vis(n, false);
        int ans = 0;
        auto dfs = [&](auto&& self, int i) ->void{
            vis[i] = true;
            for (int j = 0; j < n; ++j) {
                if (a[i][j] && !vis[j]) {
                    self(self, j);
                }
            }
        };
        for (int i = 0; i < n; ++i) {
            if (vis[i]) continue;
            dfs(dfs, i);
            ++ans;
        }
        return ans;
    }
};

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

import java.util.*;

class Solution {
    public int getIsLandGroupCount(int[][] a) {
        int n = a.length;
        boolean[] vis = new boolean[n];
        int ans = 0;

        // 定义深度优先搜索函数
        Runnable dfs = new Runnable() {
            private void dfsUtil(int i) {
                vis[i] = true;
                for (int j = 0; j < n; ++j) {
                    if (a[i][j] == 1 && !vis[j]) {
                        dfsUtil(j);
                    }
                }
            }

            @Override
            public void run() {
                for (int i = 0; i < n; ++i) {
                    if (!vis[i]) {
                        dfsUtil(i);
                        ++ans;
                    }
                }
            }
        };

        // 执行深度优先搜索
        dfs.run();
        return ans;
    }

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

class Solution:
    def getIsLandGroupCount(self, a):
        n = len(a)
        vis = [False] * n
        ans = 0

        def dfs(i):
            vis[i] = True
            for j in range(n):
                if a[i][j] == 1 and not vis[j]:
                    dfs(j)

        for i in range(n):
            if not vis[i]:
   

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

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论
力扣原题诶,Max num of islands😺
点赞 回复 分享
发布于 2024-05-26 07:51 吉林

相关推荐

04-13 17:28
门头沟学院 Java
简答题1.&nbsp;请写出你玩过并且印象深刻的游戏的名称、你累计玩的时间、水平以及对该游戏的简要评价,请写出5-10款。(包括街机游戏、家用机游戏、电脑单机/网络游戏、手机单机/网络游戏)2.&nbsp;你在玩游戏的过程中有没有碰到过什么bug,有没有想过为什么出现这样的问题,请分别列举。3.&nbsp;现有2个空水壶,容积分别为5升和6升,如何只用这2个水壶取得3升的水?请写出操作过程(不能借助别的容器)4.&nbsp;一位年轻的女士计划去体育馆游泳,她准备了一个干湿分离的背包、泳衣、浴巾、拖鞋,请问你认为她可能还遗漏了什么物品?5.&nbsp;假设游戏内有一种奖励数值,规则如下:玩家购买后可立即领取1000金币,后续有10档奖励,每档可领取200金币,玩家通过游戏内活动可累计活跃值,当活跃值达到时则可领取档位奖励。奖励领取是独立的,例如123档都可领取,玩家可选择只领取1和3的奖励。如果0表示该档位不可领取,1表示可以领取,2表示已经领取。例如:1-0-0-0-0-0-0-0-0-0-0表示该玩家购买了该数值,还未领取奖励且没有累计活跃值。请根据等价类划分的思想列出你认为具有代表性的领取状态组合。6.&nbsp;假设玩家获得某个物品的概率是nBase,if&nbsp;Random(1,&nbsp;100000000)&nbsp;&lt;nBase1000000100&nbsp;then&nbsp;可以获得&nbsp;else&nbsp;不可获得。如果将计算公式变为Random(1000000,&nbsp;100999999)&lt;nBase*100999999,你认为结果与原来的计算相比会有什么不同?7.&nbsp;你有什么特别的能力或者爱好、经历对你应聘这个职位是有帮助的,请简要说明。8.&nbsp;请描述到现在为止你觉得对你人生影响最大的事情是什么?请详细描述其过程以及对你的影响。编程题消除重复字符给出由全部小写字母组成的字符串str,遍历该字符串,删除任意两个相邻且相同的字母,并在删除后的字符串上反复执行该相邻字符重复项的删除操作,直到剩余的字符串没有相邻的重复字符,并返回最终的字符串。&nbsp;输入:```abccbada```&nbsp;输出```da```&nbsp;计算素数计算小于给定整数N的所有素数的个数,考虑N较大的情况。如输入N=10时,返回4。
查看8道真题和解析 投递西山居等公司6个岗位
点赞 评论 收藏
分享
评论
4
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务