在算术级数中找到缺少的元素

时间:2018-04-16 19:51:06

标签: c# list for-loop indexof

我一直在努力获取正确的列表索引(I)。基本上,算法对连续数字列表(如1,3,5,7,9,13)进行排序,并返回缺少的数字(在本例中为11)。我的问题是temp保持在-1,任何想法为什么?根据我的理解,临时应该随着我的增加而增加

root@dolphin-fvd-p1:/opt/etc # cat StartBrowser                                                                 
#!/bin/sh

PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH

am start --user 0  acr.browser.barebones

Alexandru Popa给了我一个很好的答案,但是对于未来看这个帖子的人来说,有人给我看了一个continue关键字,结果就像这样工作

    public static int FindMissing(List<int> list)
    {
        int difference;
        int missing = 0;

        for (int i = 0; i < list.Count; i++)
        {
            difference = list[1] - list[0];
            int temp = list.IndexOf(i);
            if (temp > 0)
            {
                if (list[i] - list[i - 1] != difference)
                {
                    missing = list[i - 1] + difference;
                }
            }
        }

        return missing;
    }

2 个答案:

答案 0 :(得分:1)

我们需要对您的代码进行一些更改。

首先,让我们检查列表是否包含至少两个元素,否则我们不应该运行算法。

if(list.Count <= 2)
     return 0;

其次,将差异的声明和初始化移出循环。由于差异是常量,因此不应在每次迭代时计算它。

    if(list.Count <= 2)
       return 0;

    int difference = list[1] - list[0];

第三,让我们从索引2开始循环,因为不需要检查差异是否等于差异

    if(list.Count <= 2)
       return 0;

    int difference = list[1] - list[0];

    for (int i = 2; i < list.Count; i++)
    {
    }

第四,没有必要检查你的列表是否包含其索引,这是代码的粗略部分,你只需要查看每个邻居之间的差异。如果其中一个与您的初始差异不匹配,则会得到您丢失的号码。我们应该立即返回,否则如果您的列表中还有其他缺少的元素,则可以覆盖它。

public static int FindMissing(List<int> list)
    {
        if(list.Count <= 2)
           return 0;

        int difference = list[1] - list[0];

        for (int i = 2; i < list.Count; i++)
        {
            if (list[i] - list[i - 1] != difference)
            {
                return list[i - 1] + difference;
            }
        }

        return 0;
    }

但是,此算法不会检查列表的完整性。它只找到列表中第一个缺少的元素。它没有告诉我们列表是否包含其他缺失的元素。

答案 1 :(得分:0)

根据你问题中的评论 - 你说你的清单包含元素:1040,1220,1580。

现在在for循环中,你的索引(i)将具有值0,1,2。

然后,您的temp值会尝试找到IndexOf i - 0,1,2的值。

但在你的清单中,没有这样的价值观。您的值是1040,1220,1580。因此IndexOf将始终返回-1。

这就是为什么你总是看到-1。

清理一下你的问题和代码。