对于 Leetcode 问题 1312,我实现了 pass by value 解决方案,我的测试用例的执行时间在 120ms 以上,对于通过引用传递的相同测试用例,执行时间大幅减少到大约 8ms,如何?以下是两种解决方案:
120ms + 解决方案/不接受:
class Solution {
public:
vector< vector<int> > dp;
int insert(string s,int l,int r)
{
if(dp[l][r]!=-1)
return dp[l][r];
else if(l>=r)
return 0;
if(s[l]==s[r])
dp[l][r] = insert(s,l+1,r-1) ;
else
dp[l][r] = 1 + min( insert(s,l+1,r), insert(s,l,r-1) ) ;
return dp[l][r];
}
int minInsertions(string s) {
dp.resize(s.length()+1, vector<int> (s.length()+1,-1) );
return insert(s,0,s.length()-1);
}
};
~8ms 解决方案:
class Solution {
public:
vector< vector<int> > dp;
int insert(string& s,int l,int r)
{
if(dp[l][r]!=-1)
return dp[l][r];
else if(l>=r)
return 0;
if(s[l]==s[r])
dp[l][r] = insert(s,l+1,r-1) ;
else
dp[l][r] = 1 + min( insert(s,l+1,r), insert(s,l,r-1) ) ;
return dp[l][r];
}
int minInsertions(string& s) {
dp.resize(s.length()+1, vector<int> (s.length()+1,-1) );
return insert(s,0,s.length()-1);
}
};
我有一些问题:
- 为什么差异如此显着?
- 它只发生在字符串上吗,我的意思是原始/内置数据类型的行为方式是否相同?
- 按指针传递会导致与按引用传递相同的执行吗?
- 另外,根据我对引用变量的理解,它指向同一个地址,只是它有另一个名字,这是正确的吗?
谢谢你。