我的解决方案如何比给定的示例解决方案慢?
How is my solution slower than given sample solution?
这是 2021 年 8 月 26 日的 Leet 代码问题。
我提交了几个解决方案,其中这个是最好的。然而,它花了 7 毫秒,当我看到示例 0 毫秒的解决方案时,我震惊地发现解决方案有多么复杂以及有多少条件检查。
问题(已编辑)
给定一串逗号分隔的值preorder
,returntrue
如果是二叉树的正确前序遍历序列化
保证字符串中每个逗号分隔的值必须是整数或表示空指针的字符'#'
。
所以我在 discussion 中发布了这个:
我的解决方案(用了 7 毫秒)
class Solution
{
public:
bool isValidSerialization(string preorder)
{
int c = 1;
const int L = preorder.length();
bool state = true;
for (int i = 0; i < L; i++)
{
if (state)
{
state = false;
if (!c)
return false;
if (preorder[i] != '#')
c++;
else
c--;
}
else
state = preorder[i] == ',';
}
return !c;
}
};
采样 0 毫秒解决方案
class Solution {
public:
bool isValidSerialization(string pre) {
stack<int> s;
if(pre.length()==1 && pre[0]=='#'){
return true;
}
string num = "";
for(int i=0; i<pre.length(); i++){
if(pre[i]==','){
continue;
}
if(s.empty() && i>0){
return false;
}
if(pre[i]=='#'){
if(s.empty()){return false;}
s.top()--;
while(!s.empty() && s.top()==0){
s.pop();
if(!s.empty()){s.top()--;}
if(!s.empty() && s.top()<0){
return false;
}
}
}
else{
int j=i;
while(j<pre.size() && pre[j]!=','){
j++;
}
i = j-1;
s.push(2);
}
//cout << i << " -> " << s.size() << endl;
}
if(s.size()>0){
//cout << s.size() << endl;
return false;
}
return true;
}
};
当我的程序没有复杂的对象和较少的条件语句时,它是如何变慢的?
因为我没有希望在那里得到任何回应,所以我把它贴在这里。
这是 2021 年 8 月 26 日的 Leet 代码问题。 我提交了几个解决方案,其中这个是最好的。然而,它花了 7 毫秒,当我看到示例 0 毫秒的解决方案时,我震惊地发现解决方案有多么复杂以及有多少条件检查。
问题(已编辑)
给定一串逗号分隔的值preorder
,returntrue
如果是二叉树的正确前序遍历序列化
保证字符串中每个逗号分隔的值必须是整数或表示空指针的字符'#'
。
所以我在 discussion 中发布了这个:
我的解决方案(用了 7 毫秒)
class Solution
{
public:
bool isValidSerialization(string preorder)
{
int c = 1;
const int L = preorder.length();
bool state = true;
for (int i = 0; i < L; i++)
{
if (state)
{
state = false;
if (!c)
return false;
if (preorder[i] != '#')
c++;
else
c--;
}
else
state = preorder[i] == ',';
}
return !c;
}
};
采样 0 毫秒解决方案
class Solution {
public:
bool isValidSerialization(string pre) {
stack<int> s;
if(pre.length()==1 && pre[0]=='#'){
return true;
}
string num = "";
for(int i=0; i<pre.length(); i++){
if(pre[i]==','){
continue;
}
if(s.empty() && i>0){
return false;
}
if(pre[i]=='#'){
if(s.empty()){return false;}
s.top()--;
while(!s.empty() && s.top()==0){
s.pop();
if(!s.empty()){s.top()--;}
if(!s.empty() && s.top()<0){
return false;
}
}
}
else{
int j=i;
while(j<pre.size() && pre[j]!=','){
j++;
}
i = j-1;
s.push(2);
}
//cout << i << " -> " << s.size() << endl;
}
if(s.size()>0){
//cout << s.size() << endl;
return false;
}
return true;
}
};
当我的程序没有复杂的对象和较少的条件语句时,它是如何变慢的?
因为我没有希望在那里得到任何回应,所以我把它贴在这里。