如何从数组中按递增顺序创建单片列表(子列表)

本文关键字:列表 单片 创建 顺序 数组 | 更新日期: 2023-09-27 18:21:29

我必须从c#中的数组中按递增顺序创建一个单片列表。我被给予[1 2 4 7 5 6 3 2]作为测试输入,其测试输出是[[1 2 4 7] [5 6] [3] [2]]。问题是我根本无法理解什么是问题,以及它要求我做什么,所以我开始了。

有人能告诉我,在目前的阵列场景中,单片意味着什么吗?以及这4个数组的输出是如何从输入数组中产生的?

编辑我已经了解了这些子列表是如何在输入数组时创建的,它们是在input[i]>input[i+1]时创建的。但是如何在列表中编写这样的动态子列表呢?

如何从数组中按递增顺序创建单片列表(子列表)

这是一种老式的方式:

List<int> sublist=new List<int>();
int last=Int32.MinValue;
List<int[]> list=new List<int[]>();
foreach(var i in input)
{
   if(i<last) 
   {
     list.Add(sublist.ToArray());
     sublist=new List<int>();
   }
   last=i;
   sublist.Add(i);
}
list.Add(sublist.ToArray());
var answer=list.ToArray();

更新的方法是返回一个仅在枚举时遍历的IEnumerable<IEnumerable<int>>,这要好得多,但我将把它留给您或其他人做练习。

Java解决方案:

public  List<List<Integer>> createMonolithic(List<Integer> list){
            List<Integer> r = new ArrayList<Integer>();
            List<List<Integer>> result = new ArrayList<List<Integer>>();
            for(int i = 0; i < list.size(); i++){
                if(i - 1 >=0){
                    if(list.get(i) < list.get(i-1)){
                        result.add(r);
                        r = new ArrayList<Integer>();
                        r.add(list.get(i));
                    }else{
                        r.add(list.get(i));
                    }
                }else{
                    r.add(list.get(i));
                }
            }
            result.add(r);
            return result;
        }