我正在尝试在数组中找到第一个缺失的正整数,并且我继续收到此错误消息。我对编程很新,我无法找出原因。任何人都可以帮我找到问题吗? 此外,当输入为[1]时,它也会抛出异常。
这是我的代码:
pltrdy
答案 0 :(得分:3)
您的代码中存在一些缺陷。最重要的是
int lengthList = (An[An.Count]) - (An[0]);
应该是什么? An
的长度 - 您可以迭代的An
中的项目数 - 由An.Count
给出。
由于列表是0索引的,因此您的索引i
应该从0
(不是An[0]
)走到An.Count-1
。所以你的代码应该是这样的:
for (int i = 0; i < An.Count; i++) {
if (An[i + 1] != An[i] + 1) {
missing.Add(An[i] + 1);
An.Insert(i + 1, An[i] + 1); // this will break your algorithm
}
i<An.Count
避免在最后一项之后访问索引。
请注意,这只会修复此IndexOutOfRangeException
。我不知道算法是否符合您的要求。在<{1}} 上迭代时,您插入元素(行An
)。这对我来说似乎不对。
答案 1 :(得分:0)
您遇到了一个错误:
在for
循环中,您使用此退出条件:
i <= lengthList - 1
在一个列表中,例如10个项目将迭代到9。
然后你可以像这样访问数组:
An[i + 1]
在给定的示例中,您将访问An [10],它不存在于10项数组/列表中。
循环的正确退出语句是:
i < lengthList - 1
您lengthList
的计算似乎也是错误的。将其更改为:
int lengthList = An.Count;
您的初始代码
int lengthList = An[An.Count] - An[0];
...还为您提供ArgumentOutOfRangeException
。这也没有意义。您正在访问列表的内容,而不是 length 。
<强>旁注:强>
你的初始循环状况
int i = An[0]
......可能也错了。你是说这个吗?
int i = 0
答案 2 :(得分:0)
您的问题代码:
1)([An.Count])修正:[An.Count-1]
2)int lengthList =(An [An.Count]) - (An [0]);修复:int lengthList = An.Count;