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

求一个手机能看的网站百度站长资源平台

求一个手机能看的网站,百度站长资源平台,cc域名做网站怎么样,网站建设技术总结想要精通算法和SQL的成长之路 - 前缀和的应用 前言一. 区域和检索 - 数组不可变二. 二维区域和检索 - 矩阵不可变2.1 前缀和的计算2.2 用前缀和计算二维区域和 三. 矩形区域不超过 K 的最大数值和 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 区域和检索 - 数组不可变 原…

想要精通算法和SQL的成长之路 - 前缀和的应用

  • 前言
  • 一. 区域和检索 - 数组不可变
  • 二. 二维区域和检索 - 矩阵不可变
    • 2.1 前缀和的计算
    • 2.2 用前缀和计算二维区域和
  • 三. 矩形区域不超过 K 的最大数值和

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 区域和检索 - 数组不可变

原题链接
在这里插入图片描述
思路如下:

  1. 我们统计每个元素的前缀和为preSum(i) ,不包括num[i]的值。
  2. 那么对于索引[left, right]之间的和,就可以利用前缀和来计算,值为:preSum(right+1) - preSum(left)

代码如下:

public class NumArray {int[] preSums;public NumArray(int[] nums) {int n = nums.length;// 计算前缀和,指 preSums[i] 在下标i之前的元素和preSums = new int[n + 1];for (int i = 0; i < n; i++) {preSums[i + 1] = preSums[i] + nums[i];}}public int sumRange(int left, int right) {return preSums[right + 1] - preSums[left];}
}

二. 二维区域和检索 - 矩阵不可变

原题链接
在这里插入图片描述
在这里插入图片描述

2.1 前缀和的计算

我们先来看下,对于任意一个元素,从下标 (0,0)(i,j) 之间的区域和怎么计算。如图:
在这里插入图片描述
换成代码就是:

preSums[i][j] = preSums[i][j - 1] + preSums[i - 1][j] - preSums[i - 1][j - 1] + matrix[i-1][j-1];

2.2 用前缀和计算二维区域和

如图:我们想计算A到D之间的区域和:
在这里插入图片描述
代码如下:(在设置二维数组的时候,可以增加一行和一列作为虚拟节点,数值为0)

preSums[row2+1][col2+1] - preSums[row2+1][col1] - preSums[row1][col2+1] + preSums[row1][col1];

完整代码如下:

public class NumMatrix {int preSums[][];public NumMatrix(int[][] matrix) {int row = matrix.length + 1;int col = matrix[0].length + 1;preSums = new int[row][col];// 第一列第一行的数值都是0for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {preSums[i][j] = preSums[i][j - 1] + preSums[i - 1][j] - preSums[i - 1][j - 1] + matrix[i-1][j-1];}}}public int sumRegion(int row1, int col1, int row2, int col2) {return preSums[row2+1][col2+1] - preSums[row2+1][col1] - preSums[row1][col2+1] + preSums[row1][col1];}
}

三. 矩形区域不超过 K 的最大数值和

原题链接
在这里插入图片描述
这题目可以在题目二的基础上,我们自行遍历,以开始节点(startRow,startCol) 为起始位置,在遍历所有情况的结束节点(endRow,endCol) 之间的区域和。满足条件:

  • startRow <= endRow < row
  • startCol <= endCol < col

由于是二维空间,两个节点,因此一共是4层循环:

public class Test363 {int preSum[][];public int maxSumSubmatrix(int[][] matrix, int k) {int row = matrix.length + 1;int col = matrix[0].length + 1;preSum = new int[row][col];// 结算前缀和for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {preSum[i][j] = preSum[i][j - 1] + preSum[i - 1][j] - preSum[i - 1][j - 1] + matrix[i - 1][j - 1];}}int max = Integer.MIN_VALUE;// 起始节点的横纵坐标for (int startRow = 1; startRow < row; startRow++) {for (int startCol = 1; startCol < col; startCol++) {// 结束节点的横纵坐标for (int endRow = startRow; endRow < row; endRow++) {for (int endCol = startCol; endCol < col; endCol++) {// 求得两个节点之间的区域和int sumRegion = sumRegion(startRow, startCol, endRow, endCol);if (sumRegion <= k) {max = Math.max(max, sumRegion);}}}}}return max;}public int sumRegion(int row1, int col1, int row2, int col2) {return preSum[row2][col2] - preSum[row2][col1 - 1] - preSum[row1 - 1][col2] + preSum[row1 - 1][col1 - 1];}
}
http://www.mmbaike.com/news/59165.html

相关文章:

  • wordpress中文网站模板下载收录查询站长工具
  • 国际要闻时事快报优化大师下载安装
  • 做商城网站公司吗seo描述快速排名
  • 网站二级页面做哪些东西seo网站排名推广
  • 泰州网站建设 思创平台推广策略都有哪些
  • 鄂尔多斯网站建设邀请注册推广赚钱
  • 公司网站怎么做百度竞价武汉关键词包年推广
  • 近几天发生的新闻大事保定seo推广公司
  • 织梦php网站模板西安seo服务培训
  • 广西南宁建设银行招聘网站中文域名注册
  • 模仿网站建设站建设百度应用app下载
  • 工信部网站黑名单营销咨询
  • 德阳seo网站建设网络营销工具
  • 网站 管理系统新闻热点
  • 开网店需要自己做网站吗营销推广软文案例
  • 100元网站建设关键词优化话术
  • 淘宝如何在其他网站做优惠阿里云搜索引擎网址
  • 网站类型大全广州seo网络优化公司
  • 帝国做企业网站沈阳网页建站模板
  • 我的网站要换新域名如何做好消息tvapp电视版
  • 如何用电脑做网站网店推广联盟
  • 经验丰富的网站制作公司竞价排名推广
  • bt蚂蚁沈阳seo排名优化推广
  • 本地南通网站建设app推广公司
  • 安阳做一个网站多少钱如何在网上推广产品
  • 绍兴建设局网站无锡百度快照优化排名
  • 贵州三蒲建设工程有限公司网站seo网站关键词排名快速
  • 龙川县建设网站下载百度手机助手
  • dede大气黑色网站源码学软件开发学费多少钱
  • 天猫网站建设基本情况百度公司招聘官网最新招聘