[Leet Code] Range Sum Query 2D - Immutable
こんにちは!
今日、5月の2週目の5番目のアルゴリズムRange Sum Query 2D - Immutableプールについて書きます.
サマリ
与えられた
今回、私たちは最初の考えですぐにあなたの招待を受け入れました.(本当に進歩したそうです)
例えば、
与えられた範囲の和を求めると、
だから必ず分岐処理を行います
また,
これは2 Dレイアウトで、明確なソリューションはありませんが、簡潔なソリューションのようです.
今回の位置付けを読んでいただき、ありがとうございました:)
今日、5月の2週目の5番目のアルゴリズムRange Sum Query 2D - Immutableプールについて書きます.
質問する
サマリ
与えられた
matix
において、与えられた範囲の左上隅のrow、columnおよび右下隅のrow、columnが与えられた場合、その範囲の数字の和を求めることによって問題が返される.試し方
今回、私たちは最初の考えですぐにあなたの招待を受け入れました.(本当に進歩したそうです)
matrix
が与えられた場合、row
で蓄積される.例えば、
[[1, 2, 3], [4, 5, 6]]
の形態のmatrix
であれば、[[1, 3, 6], [4, 9, 15]]
に置き換えることができる.与えられた範囲の和を求めると、
row
のcol2
元素からcol1 - 1
元素が減算される.コードの説明
int[][] numMatrix;
public NumMatrix(int[][] matrix) {
numMatrix = matrix;
for (int i = 0; i < matrix.length; i++) {
for (int j = 1; j < matrix[i].length; j++) {
numMatrix[i][j] = numMatrix[i][j - 1] + matrix[i][j];
}
}
}
for文を巡回すると、積算値を行順に保存し、numMatrix
を生成します.int result = 0;
返されるresult
変数を初期化します.for (int row = row1; row <= row2; row++) {
if (col1 > 0) {
result += numMatrix[row][col2] - numMatrix[row][col1 - 1];
} else {
result += numMatrix[row][col2];
}
}
col1
が0の場合、col1 - 1
を除外する必要はありません.だから必ず分岐処理を行います
col1
が0の場合、row
当たりの累積合計はresult
である.col1
が0でない場合、row
星積算からcol1 - 1
の元素を減算し、result
に加算する.また,
row1
とrow2
が連続していなければ,中間のrowも加算されるのでfor文を巡回する.完全なコード
class NumMatrix {
int[][] numMatrix;
public NumMatrix(int[][] matrix) {
numMatrix = matrix;
for (int i = 0; i < matrix.length; i++) {
for (int j = 1; j < matrix[i].length; j++) {
numMatrix[i][j] = numMatrix[i][j - 1] + matrix[i][j];
}
}
}
public int sumRegion(int row1, int col1, int row2, int col2) {
int result = 0;
for (int row = row1; row <= row2; row++) {
if (col1 > 0) {
result += numMatrix[row][col2] - numMatrix[row][col1 - 1];
} else {
result += numMatrix[row][col2];
}
}
return result;
}
}class NumMatrix {
int[][] numMatrix;
public NumMatrix(int[][] matrix) {
numMatrix = matrix;
for (int i = 0; i < matrix.length; i++) {
for (int j = 1; j < matrix[i].length; j++) {
numMatrix[i][j] = numMatrix[i][j - 1] + matrix[i][j];
}
}
}
public int sumRegion(int row1, int col1, int row2, int col2) {
int result = 0;
for (int row = row1; row <= row2; row++) {
if (col1 > 0) {
result += numMatrix[row][col2] - numMatrix[row][col1 - 1];
} else {
result += numMatrix[row][col2];
}
}
return result;
}
}
の最後の部分
これは2 Dレイアウトで、明確なソリューションはありませんが、簡潔なソリューションのようです.
今回の位置付けを読んでいただき、ありがとうございました:)
Reference
この問題について([Leet Code] Range Sum Query 2D - Immutable), 我々は、より多くの情報をここで見つけました https://velog.io/@khyunjiee/Leet-Code-Range-Sum-Query-2D-Immutableテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol