mistyou 2022-01-10 15:41 采纳率: 100%
浏览 67
已结题

有一个数组,想从0开始取100个数求最大最小值的下标差,一直到301-400,然后看出现次数最多的下标差是多少

问题相关代码
class GetCycle
{
    public int getCycle(float[] data)
    {
        int indexMin = 0;
        int indexMax = 0;
        List<int> cycleList = new List<int>();
        int[] cycleGather = null;
        int cycle = 0;
        var max = data[0];
        var min = data[0];

        //计算每100个数的周期
        for (int j = 0; j < data.Length - 100; j++)
        {
            for (int i = j; i < j + 100; i++)
            {
                if (max < data[i])
                {
                    int temp = 0;
                    max = data[i];
                    temp = i;
                    if (indexMax < temp)
                    {
                        indexMax = temp;
                    }
                }
                if (min > data[i])
                {
                    int temp = 0;
                    min = data[i];
                    temp = i;
                    if (indexMin < temp)
                    {
                        indexMin = temp;
                    }
                }
                cycleList.Add(Math.Abs(indexMax - indexMin) * 2);
            }                
        }

        cycleGather = cycleList.ToArray();
        //找出周期集合中重复次数最多的数值
        var res = from n in cycleGather
                  group n by n into g
                  orderby g.Count() descending
                  select g;

        var gr = res.First();
        foreach (var x in gr)
        {
            cycle = x;
        }
        return cycle;
    }
}
运行结果

我想每个小周期求一次下标差,但是按我写的代码求出来的结果是整个数组的最大最小值的下标差

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2022-01-10 17:54
    关注

    不能都初始化为0,下标应该初始化为当前批次的开始下标,最大值和最小值应该初始化为数组中可能出现的最小值和最大值(注意反过来)
    改下面这样。
    而且
    cycleList.Add(Math.Abs(indexMax - indexMin) * 2);
    这句应该放到i循环外层,放内层没必要,每次i循环都加一个数到列表中

    
                //计算每100个数的周期
                for (int j = 0; j < data.Length - grpNum; j++)
                {
                    max = -9999;//初始为这个值也不一定对,应该初始化为data数组中可能出现的最小值,要不都小于于这个的值下面的if判断就没搞了
                    min =99999;//初始为这个值也不一定对,应该初始化为data数组中可能出现的最大值,要不都是大于这个的值下面的if判断就没搞了
                    indexMin = indexMax = j;//这里应该初始化为批次的第一个下标,而不是0,要不max,min比较不通过那么可能为0
                    for (int i = j; i < j + grpNum; i++)
                    {
                        if (max < data[i])
                        {
                            int temp = 0;
                            max = data[i];
                            temp = i;
                            if (indexMax < temp)
                            {
                                indexMax = temp;
                            }
                        }
                        if (min > data[i])
                        {
                            int temp = 0;
                            min = data[i];
                            temp = i;
                            if (indexMin < temp)
                            {
                                indexMin = temp;
                            }
                        }
                    }
                    cycleList.Add(Math.Abs(indexMax - indexMin) * 2);////////////每组计算一次,不用放i循环中
                }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 已采纳回答 1月11日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请