我正在尝试编码挑战并且卡住了。
我们的想法是找到List<int>
中的最小整数,并返回一个新列表,删除该值但保留原始顺序。
我试图仅使用for
循环来执行此操作。
我遇到的问题是,当我迭代并将每个值与其他值进行比较时,我的最终结果只出现在最后一个实例中,其中一个数字小于另一个数字,不一定是最低数字。
例如,如果我传入List<int> { 1, 2, 3, 4, 5 }
,结果将返回为4。
我意识到在重复列表中使用Min
和Remove
(或类似)会更容易,但我故意试图让自己的生活更加艰难。
public static List<int> RemoveSmallest(List<int> numbers)
{
var newList = new List<int>();
var lowest = 0;
for (var i = 0; i <= numbers.Count - 1; i++)
{
for (var n = 0; n <= numbers.Count - 1; n++)
{
if (numbers[i] < numbers[n])
{
lowest = numbers[i];
}
}
}
foreach (var num in numbers)
{
if (num != lowest)
{
newList.Add(num);
}
}
newList.Remove(lowest);
return newList;
}
答案 0 :(得分:1)
以下是最接近你的代码,可以解决您的问题:
public static List<int> RemoveSmallest(List<int> numbers)
{
var newList = new List<int>();
if (numbers != null && numbers.Count > 0)
{
var lowest = numbers[0];
for (var i = 1; i < numbers.Count; i++)
{
if (numbers[i] < lowest) {
lowest = numbers[i];
}
}
foreach (var num in numbers)
{
if (num != lowest)
{
newList.Add(num);
}
}
}
return newList;
}
编辑:由于评论中存在一些问题,我添加了一个检查代码是否为空的。
答案 1 :(得分:1)
这应该可以解决问题。
pointer-events
注意number.Where()基本上在所有数字中执行第二次while循环,因此复杂度为2O(n),即O(n)。
答案 2 :(得分:-1)
不会重复播放最低项目,您可以将最低项目的索引存储在变量中。
{{1}}
}
答案 3 :(得分:-2)
虽然使用嵌套循环没有错,但你可以在没有它的情况下完成它。基本上,您可以将列表中的第一个元素视为迭代前的最小元素,然后遍历列表以检查是否有任何其他数字小于已选择的数字,如果是这种情况,则更新{{1} }适当地变量并继续列表。
完整解决方案:
lowest