已经转视觉有一段时间了 之前转的比较着急 临阵磨枪 公司急着要成果 所有当时仅仅写halcon代码而不写c#代码,目前项目已过半,决定开始学习c#,因为会java的缘故 所以c#学起来应该不会很难,所以直接从算法题入手,第一题:从一个数组中得到一个出现次数最多的数,如果两个次数一样多,返回小的那个数。
class Program
{
static void Main(string[] args)
{
int[] array = { 1, 2, 2, 3, 4, 4, 4 };
int mostFrequent = FindNumber(array);
Console.WriteLine(mostFrequent); // 输出 4
Console.ReadLine();
}
static int FindNumber(int[] array)
{
Dictionary<int, int> freq = new Dictionary<int, int>();
foreach (int num in array)
{
if (freq.ContainsKey(num))
{
freq[num]++;
}
else
{
freq[num] = 1;
}
}
int mostFrequent = array[0];
foreach (KeyValuePair<int, int> kvp in freq)
{
if (kvp.Value > freq[mostFrequent] ||
(kvp.Value == freq[mostFrequent] && kvp.Key < mostFrequent))
{
mostFrequent = kvp.Key;
}
}
return mostFrequent;
}
}
Dictionary
类型来统计数组中每个元素出现的次数。之后,它遍历字典来查找最频繁出现的数字和该数字的出现次数。在比较元素的大小时,根据要求使用了值相等时键值更小的元素。