0

有一个整数序列,我必须在其中找到重复次数最多的值。如果有许多重复值,请找到所有重复值中的最小值。

示例:如果是 {-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);

    }
4

2 回答 2

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

即,如果数字是重复的,并且它低于我们迄今为止找到的最低重复数字,则改为存储这个数字。此外,我们会跟踪是否发现任何重复的数字。请注意,因为我们设置lowestint.MaxValue开头,所以我们找到的第一个重复数字将始终低于它(或者它是相同的,在这种情况下它无论如何都是正确的)。

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

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

以防万一每个数字都不一样。

LINQ 效率低,因为您在列表中循环的次数远远超出了您的需要,但我认为您可能会喜欢一个不会​​丢弃您所做的一切的解决方案。

于 2013-01-11T09:49:29.583 回答
1

Linq方式:

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

演示

于 2013-01-11T09:45:00.777 回答