c#查找一个环上的所有递增序列

问题描述:

一个360度的圆环上以相同间隔有360个数据点,其中包含异常数据点(比如Nan),要求找到此环上的所有值连续增加的序列的集合。

解决思路:

1、首先从所给环中找到第一个数据下降的点或是异常点,以此作为递增序列查找的初始点,并进行保存;
2、从初始点开始循环,找到一个正常的数据点,则从下一个点开始循环搜寻增长序列,直到遇到异常数据或数值下降为止,若增长的数列所含数值个数大于等于2,对此序列进行保存;
3、当步骤2循环到末尾,若末尾的数值小于最开始的数值,将两者进行合并保存。

以下为代码实现部分,主要是基于C#语言, 编码软件 Microsoft Visual Studio 2019

核心代码实现:

using System;
using System.Collections.Generic;

namespace ConsoleApp2
{
    class Program
    {
       public List<List<float>> searchlist (List<float> datalist)
        {
            
            List<List<float>> vectorlist = new List<List<float>>();
            int num = 0;
            int q = 0;
            while (q < datalist.Count)
            {
                if (datalist[q] != -1)
                {
                    if (datalist[q+1] != -1 && datalist[q+1] >= datalist[q])
                    {
                        num += 1;
                        q++;
                    }
                    else
                    {
                        num += 1;
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            int init = num;         
            int j;
            while (num < datalist.Count)
            {
                if (datalist[num] != -1)
                {                  
                   
                        j = num + 1;
                        while (j < datalist.Count && datalist[j] != -1 && (datalist[j] >= datalist[j - 1]))
                        {
                            j++;
                        }
                        if (j - num > 1)
                        {
                            if (j == datalist.Count)
                            {

                                if (init >= 1)
                                {
                                    List<float> data = new List<float>();
                                    if (datalist[datalist.Count - 1] <= datalist[0])
                                    {
                                        for (int s = num; s < datalist.Count; s++)
                                        {
                                            data.Add(datalist[s]);
                                        }
                                        for (int t = 0; t < init; t++)
                                        {
                                            data.Add(datalist[t]);
                                        }
                                    }
                                    vectorlist.Add(data);
                                    break;
                                }
                            }
                            else
                            {
                                List<float> data = new List<float>();
                                for (int k = num; k < j; k++)
                                {
                                    data.Add(datalist[k]);
                                }
                                vectorlist.Add(data);
                            }                          
                        }
                        else if (j == datalist.Count && j - num == 1)
                        {
                            if (init >= 1)
                            {
                                List<float> data = new List<float>();
                                if (datalist[datalist.Count - 1] <= datalist[0])
                                {
                                    for (int s = num; s < datalist.Count; s++)
                                    {
                                        data.Add(datalist[s]);
                                    }
                                    for (int t = 0; t < init; t++)
                                    {
                                        data.Add(datalist[t]);
                                    }
                                }
                                vectorlist.Add(data);
                                break;
                            }
                        }                    
                        num = j;
                    }                 
                else
                {
                    num += 1;
                }
            }
            return vectorlist;
        }

测试代码:

 static void Main(string[] args)
        {
            Program p = new Program();
            List<float> datalist = new List<float>() { 3, 4, -1, 1, 2, -1, -1, 3, 3, 5, 4, -1, 0, 1, 2, 2};
            List<List<float>> vectorlist = p.searchlist(datalist);
            for (int i = 0; i < vectorlist.Count; i++)
            {
                for (int j = 0; j< vectorlist[i].Count; j++)
                {
                    Console.Write(vectorlist[i][j].ToString());
                }
                Console.WriteLine("\nfinished");
            }
            Console.WriteLine("over");            
        }  

测试结果:

12
finished
335
finished
012234
finished
over

ps: 初入C#语言,一点愚见,还望大神指点瑕疵或高明方法。

END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值