【发布时间】:2018-01-20 11:09:03
【问题描述】:
问题如下
TrainComposition 是通过从 左侧和右侧,在使用时间方面有效。
例如,如果我们首先从左侧连接 7 号货车,然后 通过附加货车 13,再次从左侧,我们得到一个组合 两辆货车(从左到右分别为 13 和 7)。现在第一辆可以 右边是7和第一个可以分离的 从左到右是 13。
实现一个对这个问题建模的 TrainComposition。
这个问题可能仍然与如何解决项目列表的排序有关。最初,我针对 Testdome 练习中提出的此类问题提交了一个答案。虽然答案在逻辑上是正确的,但它缺乏性能要求。因此,我在这里提出了这个问题。
我更新的问题,如下:
我已经查看了不同的集合类型,但我一直在思考如何通过我的这个 LinkedList 的实现来提高性能。
我需要的行为是 LinkedList 集合的行为,但性能很弱。您是否看到我可以进行任何调整以提高性能?也许还有另一种类型的集合,可以提供链表的功能并提高性能。我还在解决这个问题。感谢您的帮助。
using System;
using System.Collections.Generic;
using System.Linq;
public class TrainComposition
{
public TrainComposition()
{
Wagons = new LinkedList<int>();
}
private LinkedList<int> Wagons;
public void AttachWagonFromLeft(int wagonId)
{
Wagons.AddFirst(wagonId);
}
public void AttachWagonFromRight(int wagonId)
{
Wagons.AddLast(wagonId);
}
public int DetachWagonFromLeft()
{
var wagon = Wagons.First.Value;
Wagons.Remove(wagon);
return wagon;
}
public int DetachWagonFromRight()
{
var wagon = Wagons.Last.Value;
Wagons.Remove(wagon);
return wagon;
}
public static void Main(string[] args)
{
TrainComposition tree = new TrainComposition();
tree.AttachWagonFromLeft(7);
tree.AttachWagonFromLeft(13);
Console.WriteLine(tree.DetachWagonFromRight()); // 7
Console.WriteLine(tree.DetachWagonFromLeft()); // 13
}
}
here 提出了类似的问题,但使用的是 java 而不是 C#。因此,库不同,我认为这是一个未提出的问题。
编辑
为清楚起见,请参考上述Testdome问题描述。
如果可能的话,把我上面的代码,插入到Testdome客户端代码编辑框中运行测试并查看结果,如下:
- 示例案例:正确答案
- 几辆货车:正确答案
- 性能测试大量货车:超过时间限制
编辑
使用列表,如下,我也无法通过性能要求:
public TrainComposition()
{
Wagons = new List<int>();
}
private List<int> Wagons;
public void AttachWagonFromLeft(int wagonId) // insert at index 0
{
Wagons.Insert(0, wagonId);
}
public void AttachWagonFromRight(int wagonId) // add item to last/end
{
Wagons.Add(wagonId);
}
public int DetachWagonFromLeft() // remove first item (index = 0)
{
var wagon = Wagons[0];
Wagons.RemoveAt(0);
return wagon;
}
public int DetachWagonFromRight() // remove last item (index = count - 1)
{
var lastWagonIndex = Wagons.Count() - 1;
var wagon = Wagons[lastWagonIndex];
Wagons.RemoveAt(lastWagonIndex);
return wagon;
}
最新更新
敬请期待,我正在努力更新此问题以提供 codepen...
【问题讨论】:
-
您的
DetachWagonFromRight方法实际上并没有删除最后一个元素 - 如果您在LinkedList中有另一个元素具有相同的值,则会被删除 -
您在寻找什么样的性能改进?你如何衡量?
-
您可能需要考虑
List<T>而不是LinkedList -
我不知道您的性能问题是什么(您还没有定义它们),我不知道您的性能目标是什么(您还没有定义它们)。即使我仍然使用
List,小提琴here 制作了您的代码的快速版本
标签: c# performance collections