当前位置:网站首页>[算法] 剑指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); */
边栏推荐
- Acwing-116 pilot brother
- FairyGUI按钮动效的混用
- Vulnhub target: hacknos_ PLAYER V1.1
- 【RTKLIB 2.4.3 b34 】版本更新简介一
- Compile GDAL source code with nmake (win10, vs2022)
- Unity3D制作注册登录界面,并实现场景跳转
- 【GNSS】抗差估计(稳健估计)原理及程序实现
- There is no red exclamation mark after SVN update
- Mysql database reports an error: row size too large (> 8126) Changing some columns to TEXT or BLOB or using ROW_ FORMAT=DY
- [offer9]用两个栈实现队列
猜你喜欢
音乐播放(Toggle && PlayerPrefs)
Unity3D制作注册登录界面,并实现场景跳转
(5) Introduction to R language bioinformatics -- ORF and sequence analysis
Idea problem record
CUDA C programming authoritative guide Grossman Chapter 4 global memory
Naive Bayesian theory derivation
dosbox第一次使用
JS function promotion and declaration promotion of VaR variable
FairyGUI按钮动效的混用
Pytorch: tensor operation (I) contiguous
随机推荐
Affichage du changement de valeur du Buff de gain de l'interface graphique de défaillance
Unity3D,阿里云服务器,平台配置
(core focus of software engineering review) Chapter V detailed design exercises
NovAtel 板卡OEM617D配置步骤记录
Matlab读取GNSS 观测值o文件代码示例
FairyGUI增益BUFF数值改变的显示
[Nodejs] 20. Koa2 onion ring model ----- code demonstration
[offer9] implement queues with two stacks
How to add music playback function to Arduino project
FairyGUI摇杆
The master of double non planning left the real estate company and became a programmer with an annual salary of 25W. There are too many life choices at the age of 25
Esp8266 connect onenet (old mqtt mode)
PR 2021 quick start tutorial, first understanding the Premiere Pro working interface
(1) Introduction Guide to R language - the first step of data analysis
RTKLIB: demo5 b34f.1 vs b33
It has been solved by personal practice: MySQL row size too large (> 8126) Changing some columns to TEXT or BLOB or using ROW_ FORMAT
Particle system for introduction to unity3d Foundation (attribute introduction + case production of flame particle system)
Unity3d camera, the keyboard controls the front and rear left and right up and down movement, and the mouse controls the rotation, zoom in and out
[leetcode622] design circular queue
In 2020, the average salary of IT industry exceeded 170000, ranking first