当前位置:网站首页>[算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和
[算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和
2022-07-06 09:18:00 【邓嘉文Jarvan】
[算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和
题目1:

思路1: 暴力模拟
暴力模拟
代码
type NumMatrix struct {
Matrix [][]int
}
func Constructor(matrix [][]int) NumMatrix {
return NumMatrix{
Matrix: matrix}
}
//start: 17:05
//二维子矩阵的元素和
//思路: 遍历子矩阵的每一行累加值即可
func (this *NumMatrix) SumRegion(row1 int, col1 int, row2 int, col2 int) int {
//参数处理 todo
//矩阵
//行i,列j
sum := 0
for i:=row1; i <= row2; i++ {
for j:=col1; j <= col2; j++{
sum += this.Matrix[i][j]
}
}
return sum
}
/** * Your NumMatrix object will be instantiated and called as such: * obj := Constructor(matrix); * param_1 := obj.SumRegion(row1,col1,row2,col2); */

思路2: 提前算好每个区域的值然后最后计算
比如计算蓝色区域1的值可以等于红色区域2减去绿色区域3和其他区域4和5
我们在构造的时候记录好矩形左上到右下位置的值然后获得每个区域的时候时间复杂度是 O(1)

代码2
type NumMatrix struct {
sums [][]int
}
func Constructor(matrix [][]int) NumMatrix {
//第一行
for j:=1; j < len(matrix[0]); j++{
matrix[0][j] = matrix[0][j-1] + matrix[0][j]
}
//第2-n行
for i:=1; i < len(matrix); i++ {
sum := 0
for j:=0; j < len(matrix[0]); j++{
sum += matrix[i][j]
matrix[i][j] = sum + matrix[i-1][j]
}
}
return NumMatrix{
sums: matrix}
}
//start: 17:05
//二维子矩阵的元素和
//思路2: 提前计算好(0,0)到每个点的sum然后第二次计算就能O(1)
//a1 - a2 - a3 -a4
func (this *NumMatrix) SumRegion(row1 int, col1 int, row2 int, col2 int) int {
a1 := this.sums[row2][col2]
a2 := 0
a3 := 0
a4 := 0
if row1 >= 1 {
a2 = this.sums[row1-1][col1]
if col1 >= 1 {
a2 = this.sums[row1-1][col1-1]
}
}
if row1 >= 1 {
a3 = this.sums[row1-1][col2] - a2
}
if col1 >= 1 {
a4 = this.sums[row2][col1-1] - a2
}
return a1 - a2 - a3 - a4
}
/** * Your NumMatrix object will be instantiated and called as such: * obj := Constructor(matrix); * param_1 := obj.SumRegion(row1,col1,row2,col2); */

边栏推荐
猜你喜欢

Fairygui loop list

The service robots that have been hyped by capital and the Winter Olympics are not just a flash in the pan

Unity场景跳转及退出

First use of dosbox

Fairygui gain buff value change display

FairyGUI循環列錶

Derivation of logistic regression theory

Fabrication of fairygui simple Backpack

MySQL time, time zone, auto fill 0

PR 2021 quick start tutorial, first understanding the Premiere Pro working interface
随机推荐
Detailed explanation of truncate usage
Unity3D制作注册登录界面,并实现场景跳转
Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
NovAtel 板卡OEM617D配置步骤记录
微信小程序开发心得
[Offer29] 排序的循环链表
Office prompts that your license is not genuine pop-up box solution
SSD technical features
(五)R语言入门生物信息学——ORF和序列分析
GNSS定位精度指标计算
抗差估计在rtklib的pntpos函数(标准单点定位spp)中的c代码实现
基本Dos命令
JUC forkjoin and completable future
KF UD分解之UD分解基础篇【1】
MySQL time, time zone, auto fill 0
[leetcode19]删除链表中倒数第n个结点
Compilation principle: preprocessing of source program and design and implementation of lexical analysis program (including code)
Intermediate use tutorial of postman [environment variables, test scripts, assertions, interface documents, etc.]
MySQL performance tuning - dirty page refresh
1041 be unique (20 points (s)) (hash: find the first number that occurs once)