当前位置: 首页 > 面试题库 >

在数组中查找块

潘皓
2023-03-14
问题内容

我正在寻找一些面试问题,但偶然发现了一个问题:

有一个mxn数组。数组中的一个块用1表示,0表示没有块。您应该在数组中找到对象的数量。一个对象不过是一组水平和/或垂直连接的块。

例如

0 1 0 0
0 1 0 0
0 1 1 0
0 0 0 0
0 1 1 0

答:此数组中有2个对象。L形对象和最后一行中的对象。

我在想出一种可以捕捉“ u”(如下图)形状的算法时遇到了麻烦。我应该如何处理?

0 1 0 1
0 1 0 1
0 1 1 1
0 0 0 0
0 1 1 0

问题答案:

这在C#中有效

    static void Main()
    {
        int[][] array = { new int[] { 0, 1, 0, 1 }, new int[] { 0, 1, 0, 1 }, new int[] { 0, 1, 1, 1 }, new int[] { 0, 0, 0, 0 }, new int[] { 0, 1, 1, 0 } };
        Console.WriteLine(GetNumber(array));
        Console.ReadKey();
    }

    static int GetNumber(int[][] array)
    {
        int objects = 0;
        for (int i = 0; i < array.Length; i++)
            for (int j = 0; j < array[i].Length; j++)
                if (ClearObjects(array, i, j))
                    objects++;
        return objects;
    }

    static bool ClearObjects(int[][] array, int x, int y)
    {
        if (x < 0 || y < 0 || x >= array.Length || y >= array[x].Length) return false;
        if (array[x][y] == 1)
        {
            array[x][y] = 0;
            ClearObjects(array, x - 1, y);
            ClearObjects(array, x + 1, y);
            ClearObjects(array, x, y - 1);
            ClearObjects(array, x, y + 1);
            return true;
        }
        return false;
    }


 类似资料:
  • 对于这个任务,我认为我做对了,但是当我在网上提交时,即使我用Eclipse检查过,它也没有把它列为正确的。 提示: 写一个方法isPalinene,它接受一个Strings数组作为它的参数,如果该数组是回文(如果它向前读取和向后读取相同),则返回true,如果不是,则返回 /false。例如,数组{"alpha"、"beta"、"gamma"、"delta"、"gamma"、"beta"、"alp

  • 问题内容: 我们需要打印数组中存在的所有leaders。如果元素大于元素的右侧,则元素是领导者。 例如: 问题答案: 使用两个循环。外循环迭代数组元素,内循环检查数组的正确元素。如果当前元素大于右侧元素,则它是leaders。 java代码: 时间复杂度:o(N^2) 解决方案2: 让我们找到更优化的解决方案 我们将使用最右边的元素始终是leaders的属性。 我们将从最右边的元素开始并跟踪最大值

  • 这个问题来自一个很棒的YouTube频道,给出了可以在采访中提出的问题。 它基本上与寻找数组中的平衡点有关。这里有一个例子来最好地解释它;{1,2,9,4,-1}.因为sum(1 ^ 2)= sum(4(-1))使9成为平衡点。在没有检查答案的情况下,我决定先实现这个算法,想问问是否有更有效的方法; < li >对数组O(n)中的所有元素求和 得到总数的一半O(1) < li >从左侧开始扫描数组

  • 问题内容: 我知道以前也曾问过类似的问题,但是这个问题有些不同。我有一个未命名对象的数组,其中包含一个已命名对象的数组,我需要获取“名称”为“字符串1”的对象。这是一个示例数组。 更新: 我应该早先说过,但是一旦找到它,我想用一个编辑过的对象替换它。 问题答案: 您可以遍历数组并测试该属性:

  • 问题内容: 假设我有一个对象: 我想找到一个id为1的对象。是否有类似这样的功能?我可以使用Underscore的方法,但必须从顶部开始然后向下过滤。 问题答案: 递归是您的朋友。我更新了该函数以说明属性数组:

  • 问题内容: 是否有一种简单的方法来查找二维数组中某个元素的邻居(即,元素周围的八个元素)?缺少只是以不同的组合减去和增加索引,像这样: … 等等。 问题答案: (伪代码) 当然,这几乎要花费原始硬编码解决方案的许多行,但是通过这一解决方案,您可以最大程度地扩展“邻居”(2-3个或更多单元格)

  • 问题内容: 我有一个带有属性的关系架构(ABCD)。我也有一组功能依赖项。 现在,我需要确定R属性的所有可能子集的闭包。那就是我被困住的地方。我需要学习如何在PHP中查找子集(非重复)。 我的数组是这样存储的。 所以我的子集应该是 该代码不应该太大,但是由于某种原因我无法理解。 问题答案: 您希望获得什么动力?那就是你的问题的含义。 可以在此处找到示例(为完整性起见)