再帰を使用して329:Given an integer matrix, find the length of the longest increasing path.というリートコードの問題が完了しましたが、時間の複雑さについてはわかりません。再帰の時間複雑度を分析する方法
時間の複雑さについては、最初に外側にループがあります。したがって、2つのループについては T(m, n) = O(m*n)
です。ループの内部には、再帰呼び出しfindPath
があります。それは
T(m,n) = T(m-1, n)+T(m+1, n)+T(m, n-1)+T(m, n+1)
のようなもので、私は完全にこの1のために失われています。あなたが私のためにこれを説明するのを手伝ってくれてありがとう。
後
が私のコードです:int longestIncreasingPath(vector<vector<int>>& matrix) {
if (matrix.size() == 0 || matrix[0].size() == 0) return 0;
vector<vector<int>> cached(matrix.size(), vector<int>(matrix[0].size(), 0));
int maxVal =0;
for(int i=0; i<matrix.size(); i++){
for(int j=0; j<matrix[0].size();j++){
int length = findPath(matrix, i, j , cached, INT_MAX);
maxVal=max(length, maxVal);
}
}
return maxVal;
}
int findPath(vector<vector<int>>& matrix, int i, int j,
vector<vector<int>>& cached, int lastValue){
if(i<0 || j<0 || i>=matrix.size() || j>=matrix[0].size() || matrix[i][j]>=lastValue){
return 0;
}
if(cached[i][j]==0) {
int current = matrix[i][j];
int temp = 0;
temp= max(temp, findPath(matrix, i-1, j, cached, current));
temp= max(temp, findPath(matrix, i+1, j, cached, current));
temp= max(temp, findPath(matrix, i, j-1, cached, current));
temp= max(temp, findPath(matrix, i, j+1, cached, current));
cached[i][j] = temp+1;
}
return cached[i][j];
}