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 の方法:

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

デモ

于 2013-01-11T09:45:00.777 に答える
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 よりも効率的ではありませんが、実行したことをすべて破棄しないソリューションが必要になるのではないかと思いました。

于 2013-01-11T09:49:29.583 に答える