C#在数组中找出现次数最多的一个数

思路

我的想法是先把数组变得有序,按照从小到大的顺序排列,得到有序的数组后再去对数组进行内部数据进行次数分析在这里插入图片描述
通过相邻两数据的对比可以知道哪个数的频率最高,如果出现两个(或三或四等等)数的频率一样高,那我这种方法只会取最前面的一组数据,比如{1,2,2,3,3,5,5,9},取到的数据是2.但因为我得到的数据是有六位的浮点数float类型,比如1.78569这种类型的。

 private float[] allHeightData=new float[100];  //zy:创建一个数组,用于存放一定量的身高数据

 /// <summary>
    /// zy:将数组里面出现次数最频繁的值取出来
    /// </summary>
    /// <param name="f"></param>
    void MaxCountHeightData(float[] f,out float height)
    {
        //冒泡一遍,使数组从小到大排序
        for (int j = 0; j < f.Length - 1; j++)
        {
            for (int i = 0; i < f.Length - 1 - j; i++)
            {
                if (f[i] > f[i + 1])
                {
                    float temp = f[i];
                    f[i] = f[i+1];
                    f[i+1] = temp;
                }
            }
        }
        //排序完成,数组已经按由小到大顺序排列
        //foreach (int number in f)
        //{
        //    Debug.Log(number);
        //}

        //选择频繁数,不考虑频繁数频率相同的情况
        int count = 1, max = 1;  //当前次数和最大次数
        float num = f[0];        //数组中最大的值
        for (int i=1; i < f.Length; ++i)
        {
            if (f[i] == f[i - 1])
                count++;
            else
                count = 1;
            if (max < count)
            {
                max = count;
                num = f[i];
            }
        }
        print(num + ":" + max);
        height = num;
    }

传递进去的数组我取了小数后两位

allHeightData[count] = float.Parse(userData.ToString("#0.00")); ;   //zy

这种方法可以把第一组频率最高的数据抓取出来


2019/09/28更
计数法:
先选定数组第一个数,然后从数组第一个数字开始计数,每和选定的数字相同,计树count就+1,一直遍历完所有的数,count=n(n为自然数)
然后选定第二个数,然后从数组第一个数字开始计数,每和选定的数字相同,计树count就+1,一直遍历完所有的数,count=n(n为自然数)
以此类推。。。
在比较之前先确认选定的数字在之前是否有被选中参与比较过,代码如下:

        public static int Search(int[] arrs)
        {            
            int len = arrs.Length;
            int max = 0;  //出现最多的次数
            int num = 0;  //当前的数字
            
            List<int> temps = new List<int>(); //a
            for (int i = 0; i < len; i++)
            {
                if (temps.Contains(arrs[i])) continue;      //排除之前参与过的数字        
                int count = 0;
                for (int j = 0; j < len; j++)
                {
                    if (arrs[i] == arrs[j])
                    {
                        count++;
                    }
                }
                if (count > max)
                {
                    max = count;
                    num = arrs[i];
                }
                temps.Add(arrs[i]); //a
            }
            return num;
        }
```

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值