整数序列,我必须找到最重复的序列。如果重复多次,找到最低值

时间:2013-01-11 09:38:25

标签: c#

这是一个整数序列,我必须找到最重复的值。包含许多重复值,找到所有重复值的最低值。

示例:如果{-10,17,13,17,-10,21},则结果为-10

到目前为止我已经走了多远:

        static void YL2()
    {
        Random random = new Random();

        int mitu = 10, minv = 0, maxv = 20;
        int[] mas1 = new int[mitu];
        int i;
        int lowest;


        for (i = 0; i < mitu; i++) mas1[i] = random.Next(minv, maxv);
        for (i = 0; i < mitu; i++)
            Console.Write("{0,4}", mas1[i]);
        Console.Write("\n\n");

        int count = 0;
        List<int> checkedNumbers = new List<int>();


        foreach (int t in mas1)
        {
            if (!checkedNumbers.Contains(t))
            {
                foreach (int m in mas1)
                {
                    if (m == t)
                    {
                        count++;
                    }
                }
                Console.WriteLine("Number {0} is repeated {1} times", t, count);
                count = 0;
                checkedNumbers.Add(t);
            }
        }

        for (lowest = mas1[0], i = 1; i < mitu; i++)
        {
            if (mas1[i] < lowest) lowest = mas1[i];
        }
        Console.Write("Lowest value is {0}\n\n", lowest);

    }

2 个答案:

答案 0 :(得分:1)

Linq方式:

var lowestMaxCountDuplicate = sequence
               .GroupBy(i => i)
               .OrderByDescending(g => g.Count())
               .ThenBy(g => g.Key)
               .First().Key;

Demo

答案 1 :(得分:1)

这种方式不涉及替换您使用LINQ编写的所有代码,因为您自己已经完成了很多代码:

在声明中,将int lowest;替换为

bool foundOne = false;
int lowest = int.MaxValue;

我们将继续跟踪最低重复次数。

Console.WriteLine("Number {0} is repeated {1} times", t, count);之后,添加

if (count > 1 && t < lowest)
{
     foundOne = true;
     lowest = t;
}

即。如果数字重复并且低于我们到目前为止找到的最低重复数字,则存储此数字。此外,我们会跟踪是否找到任何重复的数字。请注意,因为我们首先将lowest设置为int.MaxValue,我们找到的第一个重复数字将始终低于它(它是相同的,在这种情况下它是正确的反正)。

然后在最后,而不是你的for循环,有以下内容:

if (foundOne)
    Console.Write("Lowest repeated value is {0}\n\n", lowest);
else
    Console.Write("No repeated values found\n\n");

以防每个数字都不同。

这个 的效率低于LINQ,因为你在列表中循环的次数远远超过你的需要,但我认为你可能想要一个不会丢掉你所有东西的解决方案已完成。

相关问题