gpt4 book ai didi

c++ - Longest Common Subsequence memoization 方法在 LeetCode 上给出 Time Limit Error

转载 作者:行者123 更新时间:2023-12-02 10:10:25 38 4
gpt4 key购买 nike

为什么我的 c++ 实现用于查找 Longest Common Subsequencetime limit error在 LeetCode 上。如何提高该算法的时间复杂度?

    int longestCommonSubsequence(string text1, string text2) {
int n1 = text1.length(), n2 = text2.length();
vector<vector<int>> dp(n1+1, vector<int>(n2+1, -1));
longestCommonSubsequence(text1, text2, n1, n2, dp);
return dp[n1][n2];
}
int longestCommonSubsequence(string text1, string text2, int n1, int n2,
vector<vector<int>> &dp) {
if(n1==0 || n2==0) {
return 0;
}

if(dp[n1][n2] != -1) {
return dp[n1][n2];
}

if(text1[n1-1]==text2[n2-1]) {
dp[n1][n2] = 1 + longestCommonSubsequence(text1, text2, n1-1, n2-1, dp);
return dp[n1][n2];
}
else {
dp[n1][n2] = max(longestCommonSubsequence(text1, text2, n1-1, n2, dp),
longestCommonSubsequence(text1, text2, n1, n2-1, dp));
return dp[n1][n2];
}
}

最佳答案

我们可以不用递归来解决这个问题,类似地使用动态规划。如果没有 TLE,这将通过:

// The following block might slightly improve the execution time;
// Can be removed;
static const auto __optimize__ = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();

// Most of headers are already included;
// Can be removed;
#include <cstdint>
#include <string>
#include <vector>
#include <algorithm>

using ValueType = std::uint_fast16_t;

static const struct Solution {
static const int longestCommonSubsequence(
const std::string& text_a,
const std::string& text_b
) {
const ValueType a_len = std::size(text_a);
const ValueType b_len = std::size(text_b);
std::vector<std::vector<ValueType>> dp(a_len + 1, std::vector<ValueType>(b_len + 1));

for (ValueType a = 1; a <= a_len; ++a) {
for (ValueType b = 1; b <= b_len; ++b) {
if (text_a[a - 1] == text_b[b - 1]) {
dp[a][b] = 1 + dp[a - 1][b - 1];

} else {
dp[a][b] = std::max(dp[a - 1][b], dp[a][b - 1]);
}
}
}

return dp[a_len][b_len];
}
};

关于c++ - Longest Common Subsequence memoization 方法在 LeetCode 上给出 Time Limit Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63823727/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com