平面範圍求和 不可變矩陣 LintCode

2021-08-14 09:18:52 字數 2026 閱讀 1160

給一 二維矩陣,計算由左上角 (row1, col1) 和右下角 (row2, col2) 劃定的矩形內元素和.

注意事項:

你可以假設矩陣不變

對函式 sumregion 的呼叫次數有很多次

你可以假設 row1 ≤ row2 並且 col1 ≤ col2

樣例:

給出矩陣

[

[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]

]

sumregion(2, 1, 4, 3) -> 8

sumregion(1, 1, 2, 2) -> 11

sumregion(1, 2, 2, 4) -> 12

思路:

對於規定陣列matrix,構造陣列vec,vec[i][j]表示從matrix[0][0]到matrix[i][j]的區間的陣列元素之和。求sumregion(row1, col1, row2, col2),可以利用公式 su

mreg

ion(

row1

,col

1,ro

w2,c

ol2)

=⎧⎩⎨

⎪⎪⎪⎪

⎪⎪ve

c[ro

w2][

col2

],ve

c[ro

w2][

col2

]−ve

c[ro

w2][

col1

−1],

vec[

row2

][co

l2]−

vec[

row1

−1][

col2

],re

turn

vec[

row2

][co

l2]−

vec[

row2

][co

l1−1

]−ve

c[ro

w1−1

][co

l2]+

vec[

row1

−1][

col1

−1],

row1

==0,c

ol1==

0row

1==0,

col1

!=0r

ow1!

=0,c

ol1==

0oth

er

#ifndef c665_h

#define c665_h

#include

#include

using

namespace

std;

class nummatrix

for (int i = 1; i < row; ++i)

for (int i = 1; i < row; ++i)}}

/** @param row1: an integer

* @param col1: an integer

* @param row2: an integer

* @param col2: an integer

* @return: an integer

*/int sumregion(int row1, int col1, int row2, int col2)

vector

> vec;

};/**

* your nummatrix object will be instantiated and called as such:

* nummatrix obj = new nummatrix(matrix);

* int param_1 = obj.sumregion(row1,col1,row2,col2);

*/#endif

可變範圍求和

給定乙個整數陣列nums,然後你需要實現兩個函式 樣例 1 輸入 nums 1,3,5 sumrange 0,2 update 1,2 sumrange 0,2 輸出 9 8樣例 2 輸入 nums 0,9,5,7,3 sumrange 4,4 sumrange 2,4 update 4,5 upd...

IOS網路請求(可變請求和不可變的區別)

有些方法在可變請求的時候是不能用的。有些剛開始不一定指定它的url那麼可以在後面進行變動。那麼就用可變請求。通常我們的url請求可能是一組,並不是乙個,而且我們的url請求也是會不停的根據流程在變化的,所以我們要仍然使用nsurlrequest這個物件是不能隨時的進行乙個url的變化的,因此我們的n...

範圍矩陣元素和 可變的

給定乙個二維陣列 矩陣 需要查詢它的某個子矩陣的元素的和,同時矩陣內的元素可以被改變.你需要實現三個方法 樣例 1 輸入 nummatrix 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 sumregion 2,1,4,3 update 3,2,...