当前位置:网站首页>[算法] 剑指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); */

边栏推荐
- JUC forkjoin and completable future
- FairyGUI摇杆
- What is the maximum length of MySQL varchar field
- Office prompts that your license is not genuine pop-up box solution
- Get the position of the nth occurrence of the string
- FairyGUI条子家族(滚动条,滑动条,进度条)
- Game 280 weekly
- [offer9] implement queues with two stacks
- By v$rman_ backup_ job_ Oracle "bug" caused by details
- Esp8266 connect onenet (old mqtt mode)
猜你喜欢
随机推荐
KF UD分解之伪代码实现进阶篇【2】
Game 280 weekly
FairyGUI复选框与进度条的组合使用
[offer18] delete the node of the linked list
Meanings and differences of PV, UV, IP, VV, CV
单片机蓝牙无线烧录
【干货】提升RTK模糊度固定率的建议之周跳探测
FairyGUI增益BUFF數值改變的顯示
Problèmes avec MySQL time, fuseau horaire, remplissage automatique 0
地球围绕太阳转
Programming homework: educational administration management system (C language)
如何给Arduino项目添加音乐播放功能
(core focus of software engineering review) Chapter V detailed design exercises
Theoretical derivation of support vector machine
2021.11.10 compilation examination
Talking about the startup of Oracle Database
Prove the time complexity of heap sorting
idea中好用的快捷键
Detailed explanation of truncate usage
(课设第一套)1-5 317号子任务 (100 分)(Dijkstra:重边自环)








