lintcode_和為零的子矩陣
阿新 • • 發佈:2019-01-30
給定矩陣
[
[1 ,5 ,7],
[3 ,7 ,-8],
[4 ,-8 ,9],
]
返回 [(1,1), (2,2)]
普通解法:使用空間換時間,四重迴圈用來確定子矩陣的邊界,使用陣列記錄累積子矩陣的和,這樣可以節約兩重迴圈,時間複雜度O(n**4)
int temresp[300][300]; vector<vector<int>> submatrixSum(vector<vector<int>>& matrix){ vector<int>leftup; vector<int>rido; vector<vector<int> >res; int colpre = 0; int rowpre = 0; for(int i = 0;i<matrix.size();i++) { for(int j = 0;j<matrix[0].size();j++) { colpre = matrix[i][j]; for(int k = i;k<matrix.size();k++) { if(k!=i)colpre += matrix[k][j]; rowpre = colpre; for(int l = j;l<matrix[0].size();l++) { if(k==i&&l!=j){ temresp[k-i][l-j] = matrix[k][l]; } if(k!=i&&l!=j){ temresp[k-i][l-j] = temresp[k-i-1][l-j]+matrix[k][l]; } rowpre+=temresp[k-i][l-j]; if(rowpre==0){ leftup.push_back(i); leftup.push_back(j); rido.push_back(k); rido.push_back(l); res.push_back(leftup); res.push_back(rido); return res; } } } } } }