我一直在努力获取正确的列表索引(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;
}
答案 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。
清理一下你的问题和代码。