-
[leetcode] 304. Range Sum Query 2D - Immutable알고리즘 2021. 4. 8. 13:14728x90
class NumMatrix { public: vector<vector<int>> dp; NumMatrix(vector<vector<int>>& matrix) { dp.assign(matrix.size(), vector<int>(matrix[0].size(), 0)); for(int i = 0; i<matrix.size(); i++){ for(int j = 0; j<matrix[0].size(); j++){ dp[i][j] = (i - 1 >= 0 ? dp[i - 1][j] : 0) + (j - 1 >= 0 ? dp[i][j - 1] : 0) - ((i - 1 >= 0 && j - 1 >= 0) ? dp[i - 1][j - 1] : 0) + matrix[i][j]; } } } int sumRegion(int row1, int col1, int row2, int col2) { return dp[row2][col2] - (row1 - 1 >= 0 ? dp[row1 - 1][col2] : 0) - (col1 - 1 >= 0 ? dp[row2][col1 - 1] : 0) + ((row1 - 1 >= 0 && col1 - 1>= 0) ? dp[row1 - 1][col1 - 1] : 0); } };
아주 단순한 dp문제입니다.
2차원 배열에서 각 칸까지의 직사각형의 합을 저장해두고
나중에 결과출력할떄 써먹으면 됩니다.
이정도 실행속도면 거이 최적의 해로 보입니다.
시간복잡도 o(n)
'알고리즘' 카테고리의 다른 글
[leetcode] 86. Partition List (0) 2021.04.14 [leetcode] 130. Surrounded Regions (0) 2021.04.08 [LEETCODE] 34. Find First and Last Position of Element in Sorted Array (0) 2021.04.08 [leetcode] 84. Largest Rectangle in Histogram (0) 2021.03.29 [leetcode] 18. 4Sum (0) 2021.03.29