找出缺失的范围序列

时间:2014-05-02 09:08:16

标签: asp.net c#-4.0

我有范围序列。我想知道他们的任何缺失序列。

假设我们有3个边距0 -25,25-50,75-100 因此程序将结果显示为50-75。缺少序列。

1 个答案:

答案 0 :(得分:0)

正如其他人所说,你应该至少提供一些代码供我们开始使用。 IMO也与ASP.NET无关。

以下是可能有所帮助的解决方案。

我假设了一些事情

  • 您获得的边距可以转换为List<string>
  • 任何2个边距之间始终只有1个边距丢失。也就是说永远不会出现3个边距为0 -25,25-50,100-125的情况,因为连续2个边距缺少50-75和75-100。 如果可能是这种情况,请发表评论,以便我可以相应地更新我的答案
  • 列表中的第一个边距始终是起始边距

查看以下代码

List<string> margin = new List<string>() { "0-25", "25-50", "100-125" };
List<List<int>> splitedMargin = new List<List<int>>();

foreach (var item in margin)
{
    var arr = item.Split('-');
    splitedMargin.Add(new List<int>() { int.Parse(arr[0]), int.Parse(arr[1]) });
}

//Required missing margin
List<string> missingMargin = new List<string>();
int marginSize = splitedMargin[0][1] - splitedMargin[0][0];

for (int i = 1; i < splitedMargin.Count; i++)
{
    if (splitedMargin[i - 1][1] != splitedMargin[i][0])
    {
        int missingMarginCount = (splitedMargin[i][0] - splitedMargin[i - 1][1]) / marginSize;

        if (missingMarginCount == 1)
            missingMargin.Add(splitedMargin[i - 1][1].ToString() + "-" + splitedMargin[i][0].ToString());
        else
        {
            for (int j = 0; j < missingMarginCount; j++)
            {
                missingMargin.Add((splitedMargin[i - 1][1] + (marginSize * j)).ToString() + "-" + (splitedMargin[i - 1][1] + (marginSize * (j + 1))).ToString());
            }
        }
    }
}

希望这有帮助