首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查找二维数组中1的块的中心

二维数组中的1块中心是指由连续的1构成的区域的中心点。查找二维数组中1的块的中心可以通过以下步骤实现:

  1. 遍历二维数组,找到第一个值为1的元素作为起点。
  2. 使用深度优先搜索(DFS)或广度优先搜索(BFS)算法,依次遍历与当前元素相邻且值为1的元素。
  3. 在遍历的过程中,记录遍历到的1的坐标,计算坐标的和与坐标的平均值,即为1块的中心点。
  4. 继续遍历,直到所有与起点相连的1块都被遍历过。

以下是一个使用DFS算法查找二维数组中1块中心的示例代码(以Python语言为例):

代码语言:txt
复制
def dfs(grid, x, y, visited):
    if x < 0 or y < 0 or x >= len(grid) or y >= len(grid[0]):
        return
    
    if grid[x][y] != 1 or visited[x][y]:
        return
    
    visited[x][y] = True
    
    # 计算坐标的和与坐标的平均值
    center_sum_x += x
    center_sum_y += y
    
    dfs(grid, x+1, y, visited)
    dfs(grid, x-1, y, visited)
    dfs(grid, x, y+1, visited)
    dfs(grid, x, y-1, visited)

def find_block_center(grid):
    m, n = len(grid), len(grid[0])
    visited = [[False for _ in range(n)] for _ in range(m)]
    
    # 遍历二维数组,找到起点
    for i in range(m):
        for j in range(n):
            if grid[i][j] == 1:
                center_sum_x, center_sum_y = 0, 0
                dfs(grid, i, j, visited)
                
                # 计算坐标的平均值
                center_x = center_sum_x / num_of_ones
                center_y = center_sum_y / num_of_ones
                
                return center_x, center_y

# 调用示例
grid = [[0, 0, 0, 0, 0],
        [0, 1, 1, 1, 0],
        [0, 1, 1, 1, 0],
        [0, 1, 1, 1, 0],
        [0, 0, 0, 0, 0]]

center = find_block_center(grid)
print("块的中心坐标:", center)

对于此问题,推荐使用腾讯云的云原生产品,如腾讯云容器服务(Tencent Kubernetes Engine,TKE),它提供了基于Kubernetes的容器管理服务,可以快速部署和管理容器化应用程序。您可以通过腾讯云容器服务在云上搭建一个高可用、可伸缩的应用程序环境。更多关于腾讯云容器服务的信息,请访问腾讯云容器服务

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1二维数组查找

1,题目描述 在一个二维数组(每个一维数组长度相同),每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。...请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。...2,解题思路 题目中说是左到右递增,上到下也是递增,也就是说我们可以从右上角开始遍历查找; 定义二维数组arr[row][col],从第一行开始找定义行row=0,那么最右上角元素val列坐标为arr[...0].length-1; 若目标元素tar比val大,那么第0行就全部比tar小,直接下移row++; 若目标元素tar比val小,那么此时应向左查找,直接左移col--; while循环查找即可;...//row应小于二维数组行数,clo应大等于0 while(row=0){ if(target==array

61330

二维数组查找

题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组。...Consider the following matrix: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22...解题思路 要求时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数,N 为 列数。 该二维数组一个数,小于它数一定在其左边,大于它数一定在其下边。...因此,从右上角开始查找,就可以根据 target 和当前元素大小关系来快速地缩小查找区间,每次减少一行或者一列元素。当前元素查找区间为左下角所有元素。...// 从右上角开始 while (r = 0) { if (target == matrix[r][c]) return

1.5K20
  • 二维数组查找

    题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组。...Consider the following matrix: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22...解题思路 要求时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数,N 为 列数。 该二维数组一个数,小于它数一定在其左边,大于它数一定在其下边。...因此,从右上角开始查找,就可以根据 target 和当前元素大小关系来快速地缩小查找区间,每次减少一行或者一列元素。当前元素查找区间为左下角所有元素。...static void main(String[] args) { int[][] matrix = new int[][] { {1,

    1.6K20

    算法-二维数组查找

    问题: 在一个二维数组,每一行元素都按照从左到右递增顺序排序,每一列元素都按照从上到下递增顺序排序。实现一个查找功能函数,函数输入为二维数组和一个整数,判断数组是否含有该整数。...要查找数组7在不在数组内,根据前人总结出来规律,我们可以这样做: 选择从数组右上角点开始比较,此时该值为9,9>7,同时9还是第四列最小数字,那么这意味着,第四列都不可能找到7,于是我们可以直接删除第四列...如果相等的话,查找就结束了~~~ 所以无论是哪一种情况,都可以让我们删除一个行或一个列,下一次要比较那个值就是删除后二维数组右上角值,总之永远在用右上角值在比较。...:matrix[row * columns + column],这是因为我们把二维数组作为参数传递了,参数传递时将二维数组强制转换为一维指针,这就相当于把二维数组按照行连起来,连接成一个一维数组,那么...matrix[row * columns + column]不就是对应二维数组第row行,第column列那个数么。

    1.5K100

    二维数组查找

    题目:在一个二维数组,每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。       ...下面我们以在题目中给出数组查找数字7为例来一步步分析查找过程。        我们发现如下规律:首先选取数组右上角数字。...也就是说如果要查找数字不在数组右上角,则每一次都在数组查找范围剔除一行或者一列,这样每一步都 可以缩小查找范围,直到找到要查找数字,或者查找范围为空。      ...以左上角为例,最初数字1位于初始数组左上角,由于1小于7,那么7应该位于1右边或者下边。此时我们既不 能从查找范围内剔除1所在行,也不能剔除1所在列,这样我们就无法缩小查找范围。...\n");   }   // 要查找数在数组 void Test1()   {   int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7

    1.3K50

    剑指offer:二维数组查找

    每道题会提供简单思路以及测试通过代码 题目描述 在一个二维数组(每个一维数组长度相同),每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。...请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。...注:点击左下角阅读原文可以直达原文提交你代码 解答思路 一种简单方法就是整个数组都遍历,当然,数组从左到右,从上到下都是有序,如果你遍历整个数组的话,那就浪费了数组局部有序性了。...实际上我们从数组左下角开始遍历的话,如果 array[row][col] > target,则往上移动,如果array[row][col] < target,则往右移动,否则找到目的数。...; 3 int row = array.length - 1; 4 int col = array[0].length - 1; 5 int j = 0;

    56720

    LeetCode120|二维数组查找

    1,问题简述 在一个 n * m 二维数组,每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。...2,示例 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10...限制: 0 <= n <= 1000 0 <= m <= 1000 3,题解思路 本题基于二维数组给出特点和hashSet两种思路进行解决,那么接下来看下题解程序是怎么个实现方式吧 4,题解程序...false; } int rowLength = matrix.length; int colLength = matrix[0].length - 1;...,特别是它contains()方法,使用频率更高,也是我们应该熟知一些内容,特别是对于应用开发人员

    68820

    【剑指offer题解】二维数组查找

    题目介绍 在一个二维数组(每个一维数组长度相同),每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。...请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。 解题思路 方法一 首先能够想到肯定是一行一行或者一列一列遍历,判断数组是否含有该整数。...该方法显然是最笨拙二维数组遍历,面试官也不会满意,时间复杂度是O(n^2) 代码 Python class Solution: def Find(self, target, array):...举个例子,如下图数组所示: 1 2 3 4 2 3 8 9 3 4 9 10 4 5 10 11 我们位置是1,要找8,8大于1,那么在1右边和下边区域进行下一步搜索...3 8 9 4 9 10 5 10 11 这个区域搜索了两次,我们是从数组第一个数[0][0]取,遇到了重复搜索区域问题。

    47620

    剑指offer 03:二维数组查找

    ❝永远要这样写代码,好像最终维护你代码的人是个狂暴、知道你住在哪里精神病患者—— 小浩算法 ❞ 二维数组查找 题目描述 在一个二维数组(每个一维数组长度相同),每一行都按照从左到右递增顺序排序...请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。...也可以从二维数组左下方开始查找,以下代码使用左下方作为查找起点。 注意,不能选择左上方或者右下方数字,因为这样无法缩小查找范围。...public class Solution { /** * 二维数组查找 * @param target 目标值 * @param array 二维数组...(查找数字是数组最大值和最小值;查找数字介于数组最大值和最小值之间); 二维数组没有查找数字(查找数字大于/小于数组最大值;查找数字在数组最大值和最小值之间但数组没有这个数字

    63910

    【剑指offer题解】二维数组查找

    ) 题目介绍 在一个二维数组(每个一维数组长度相同),每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。...请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。 解题思路 方法一 首先能够想到肯定是一行一行或者一列一列遍历,判断数组是否含有该整数。...该方法显然是最笨拙二维数组遍历,面试官也不会满意,时间复杂度是O(n^2) 代码 Python class Solution: def Find(self, target, array):...举个例子,如下图数组所示: 1 2 3 4 2 3 8 9 3 4 9 10 4 5 10 11 我们位置是1,要找8,8大于1,那么在1右边和下边区域进行下一步搜索...3 8 9 4 9 10 5 10 11 这个区域搜索了两次,我们是从数组第一个数[0][0]取,遇到了重复搜索区域问题。

    35230

    剑指offer - 二维数组查找 - JavaScript

    题目描述:在一个二维数组(每个一维数组长度相同),每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。...请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。...题目描述 在一个二维数组(每个一维数组长度相同),每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。...请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否含有该整数。 解法 1:暴力法 遍历数组所有元素,找到是否存在。...过程如下: 从右上角开始遍历 当前元素小于目标元素(3 < 5),根据数组特点,当前行中最大元素也小于目标元素,因此进入下一行 当前元素大于目标元素(6 > 5),根据数组特点,行数不变,尝试向前一列查找

    58540
    领券