求审稿机会# Biology - 生物学
p*2
1 楼
我面试都用C,有些题觉得用C做比较麻烦。这就是一道。大家给评评。我现在也没有很
简洁的算法。
一个span array, 比如{(3,5),(7,16), (23,78)...}
然后给定一个span, 比如 (10,19), 把这个span 跟 这个array merge.
当时没听明白,以为是两个array, 做到一半的时候才搞明白。
这题我上来就觉得C比较麻烦,所以我就说用C#吧,我想用List. 定义Node as
struct Node
{
int start;
int end;
}
后来编程的时候为了方便改成了class
class Node
{
int start;
int end;
Node(int s, int e)
{}
}
因为我主要是用C的,所以稍微有些措手不及。大家看看用C能有比较简洁的code吗?即
使用C#,我code写的也不好。大家帮我看看怎么改进。大概我写的是这样的
List Merge(List list, Node node)
{
List output;
int start=-1; //assume input are all positive numbers
int end=-1;
for(int i=0;i {
if(start==-1)
{
if(list[i].endstart)
output.Add(list[i]);
else
{
start=min(list[i].start,node->start);
end=max(list[i].end,node->end);
}
}
else
{
if(list[i].start>end)
{
output.Add(new Node(start,end));
output.Add(list[i]);
start=-1;end=-1;
}
else
{
end=max(list[i].end,end);
output.Add(new Node(start,end));
start=-1;end=-1;
}
}
}
if(start!=-1) //this was a bug pointed out by interviewer
output.Add(new Node(start,end));
if(list[i-1].end output.Add(node);
return output;
}
简洁的算法。
一个span array, 比如{(3,5),(7,16), (23,78)...}
然后给定一个span, 比如 (10,19), 把这个span 跟 这个array merge.
当时没听明白,以为是两个array, 做到一半的时候才搞明白。
这题我上来就觉得C比较麻烦,所以我就说用C#吧,我想用List
struct Node
{
int start;
int end;
}
后来编程的时候为了方便改成了class
class Node
{
int start;
int end;
Node(int s, int e)
{}
}
因为我主要是用C的,所以稍微有些措手不及。大家看看用C能有比较简洁的code吗?即
使用C#,我code写的也不好。大家帮我看看怎么改进。大概我写的是这样的
List
{
List
int start=-1; //assume input are all positive numbers
int end=-1;
for(int i=0;i
if(start==-1)
{
if(list[i].end
output.Add(list[i]);
else
{
start=min(list[i].start,node->start);
end=max(list[i].end,node->end);
}
}
else
{
if(list[i].start>end)
{
output.Add(new Node(start,end));
output.Add(list[i]);
start=-1;end=-1;
}
else
{
end=max(list[i].end,end);
output.Add(new Node(start,end));
start=-1;end=-1;
}
}
}
if(start!=-1) //this was a bug pointed out by interviewer
output.Add(new Node(start,end));
if(list[i-1].end
return output;
}