当前位置: 首页 > news >正文

免费建设电影网站常熟智能网站建设

免费建设电影网站,常熟智能网站建设,游戏网站开发过程,哪些网站是做婴童辅食招商的题目 输入一个二维矩阵,如何计算给定左上角坐标和右下角坐标的子矩阵的数字之和?对于同一个二维矩阵,计算子矩阵的数字之和的函数可能由于输入不同的坐标而被反复调用多次。例如,输入图2.1中的二维矩阵,以及左上角坐标…

题目

输入一个二维矩阵,如何计算给定左上角坐标和右下角坐标的子矩阵的数字之和?对于同一个二维矩阵,计算子矩阵的数字之和的函数可能由于输入不同的坐标而被反复调用多次。例如,输入图2.1中的二维矩阵,以及左上角坐标为(2,1)和右下角坐标为(4,3)的子矩阵,该函数输出8。
在这里插入图片描述

分析

如果不考虑时间复杂度,则采用蛮力法用两个嵌套的循环总是可以求出一个二维矩阵的数字之和。如果矩阵的行数和列数分别是m和n,那么这种蛮力法的时间复杂度是O(mn)。

只是这个题目提到,对于一个二维矩阵,可能由于输入不同的坐标而反复求不同子矩阵的数字之和,这说明应该优化求和的过程,要尽可能快地实现子矩阵的数字求和。
在这里插入图片描述
阴影面积 = 黄色正方形面积 + 绿色正方行面积 - 红色长方形面积 - 蓝色长方形面积

因此,可以在预处理阶段求出从左上角坐标为(0,0)到每个右下角坐标的子矩阵的数字之和。首先创建一个和输入矩阵大小相同的辅助矩阵sums,该矩阵中的坐标(i,j)的数值为输入矩阵中从左上角坐标(0,0)到右下角坐标(i,j)的子矩阵的数字之和。

下面分析如何生成辅助矩阵sums,即求得数组中的每个数字sums[i][j]。按照生成辅助矩阵sums的规则,sums[i][j]的值等于输入矩阵中从左上角坐标为(0,0)到右下角坐标为(i,j)的子矩阵的数字之和。可以把从左上角坐标为(0,0)到右下角坐标为(i,j)的子矩阵的数字看成由两部分组成。第1部分是从左上角坐标为(0,0)到右下角坐标为(i-1,j)的子矩阵,该子矩阵的数字之和等于sums[i-1][j]。第2部分是输入矩阵中第i行中列号从0到j的所有数字。如果按照从左到右的顺序计算sums[i][j],则可以逐个累加第i行的数字,从而得到子矩阵第2部分的数字之和。

public class Test {public static void main(String[] args) {int[][] nums = {{3, 0, 1, 4, 2},{5, 6, 3, 2, 1},{1, 2, 0, 1, 5},{4, 1, 0, 1, 7},{1, 0, 3, 0, 5}};sums = generateNumMatrix(nums);int result = sumRegion(2, 1, 4, 3);System.out.println(result);}private static int[][] sums;public static int[][] generateNumMatrix(int[][] matrix) {if (matrix.length == 0 || matrix[0].length == 0) {return null;}int[][] sums = new int[matrix.length + 1][matrix[0].length + 1];for (int i = 0; i < matrix.length; i++) {int rowSum = 0;for (int j = 0; j < matrix[0].length; j++) {rowSum += matrix[i][j];sums[i + 1][j + 1] = sums[i][j + 1] + rowSum;}}return sums;}public static int sumRegion(int row1, int col1, int row2, int col2) {//return sums[row2][col2] + sums[row1-1][col1-1] - sums[row1-1][col2] - sums[row2][col1-1];return sums[row2 + 1][col2 + 1] + sums[row1][col1] - sums[row1][col2 + 1] - sums[row2 + 1][col1];}
}

如果输入矩阵的行数和列数分别是m和n,那么辅助数组sums的行数和列数分别为m+1和n+1,这样只是为了简化代码逻辑。如果用公式sums[r2][c2]+sums[r1-1][c2]-sums[r2][c1-1]+sums[r1-1][c1-1]求解左上角坐标为(r1,c1)、右下角坐标为(r2,c2)的子矩阵的数字之和,由于坐标值r1或c1有可能等于0,因此r1-1或c1-1可能是负数,不再是有效的数组下标。如果在矩阵的最上面增加一行,最左面增加一列,这样就不必担心出现数组下标为-1的情形。

http://www.yayakq.cn/news/675778/

相关文章:

  • 商务网站开发与建设论文海会网络建设网站
  • 毕业设计网站网络营销策划过程
  • 怀远网站建设哪家好网站建设服务器环境配置
  • 网站建设前期准备方案wordpress水平菜单
  • 津做网站wordpress国内不使用方法
  • 佛山家具网站建设公司广东省农业农村厅官网首页
  • 最新网站开发软件做淘宝客为什么要建网站
  • 外卖网站怎么做销量苏州那家公司做网站比较好
  • 官网和商城结合的网站营销型网站建设空间必须是
  • 免费做金融网站wordpress dux1.9
  • 北京市建设监理协会网站怎么用 c文件做网站
  • 石家庄网站开发多少钱镇平做网站
  • 电子商务网站建设课程设计做网站傻瓜软件
  • 成都网站设计公网站建设网站建设 网站制作
  • 兰州光辉网站建设三维家设计官网
  • 连云港网站建设推广龙岗区建设工程交易服务网
  • 一个朋友找我做网站该收多少钱网站备案密码重置申请表
  • 郑州企业网站设计公司哪家好策划书中网站制作怎么写
  • 猎头自己在哪个网站做单云南城市建设职业学院成绩查询网站
  • 郑州中心站外贸的整个详细流程
  • 网站制作找哪家公司好wordpress修改教程视频
  • 深圳英文建站公司网站建设需要会
  • 自己做的网站提示危险做非法网站
  • 网站侧导航360建站平台
  • 网站开发需要提供哪些资料网站手机版跳转 seo
  • 用wordpress建企业网站网站开发用c语言吗
  • 手机wap网站制作权威迷失传奇新开网站
  • 做网站是自己公司做好还是外包好对软件开发的理解和认识
  • 杭州网站优化流程流感用什么药最好
  • 福建富通建设有限公司网站比较好的wordpress主题