我有一个列表,里面有一些值
for (int i = 0; i < InputNumbers.Length; i++)
{
InputNumbers[i] = Convert.ToInt32(Console.ReadLine());
LongestSequence.Add(InputNumbers[i]);
}
for (int i = 0; i < InputNumbers.Length; i++)
{
if (i > 0)
{
if (LongestSequence[i] < LongestSequence[i - 1])
{
LongestSequence.Remove(LongestSequence[i]);
LongestSequence.Insert(i, null);
}
}
}
正如您所看到的,我将我的数组InputNumbers中的所有值添加到列表LongestSequence中,在此之后我将删除其中一些值并插入&#34; null&#34;在替换值索引处。所以这会产生类似边框的东西:
null
1
2
null
我想知道这两个空值之间的值的长度。在这种情况下它是2
答案 0 :(得分:0)
看起来像XY问题。你需要找到最长的非递减序列,你发现了一种可怕的方法,现在你希望我们帮助你。最好直接询问最长的非递减序列。设置null
中没有必要,然后尝试在它们之间查找值。
您可以执行以下操作:
List<int> current = new List<int> { Int32.MaxValue };
int[] best = new int[0];
int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n; i++)
{
var read = int.Parse(Console.ReadLine());
if (read < current[current.Count - 1])
{
if (current.Count > best.Length) best = current.ToArray();
current.Clear();
}
current.Add(read);
}
if (current.Count > best.Length) best = current.ToArray();
// Here, "best" stores the best result
它看起来更清晰,透明和可读 但是,我坚信有更多更短更优雅的解决方案。