使用for循环从列表中删除最小整数

时间:2017-04-21 12:02:30

标签: c# list for-loop

我正在尝试编码挑战并且卡住了。 我们的想法是找到List<int>中的最小整数,并返回一个新列表,删除该值但保留原始顺序。 我试图仅使用for循环来执行此操作。

我遇到的问题是,当我迭代并将每个值与其他值进行比较时,我的最终结果只出现在最后一个实例中,其中一个数字小于另一个数字,不一定是最低数字。

例如,如果我传入List<int> { 1, 2, 3, 4, 5 },结果将返回为4。

我意识到在重复列表中使用MinRemove(或类似)会更容易,但我故意试图让自己的生活更加艰难。

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;
        }

4 个答案:

答案 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