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

时间:2015-11-11 17:15:50

标签: c# arrays algorithm data-structures

我必须在c#中按递增顺序从数组创建一个整体列表。我被赋予[1 2 4 7 5 6 3 2]作为测试输入,其测试输出为[[1 2 4 7] [5 6] [3] [2]]。问题是我完全没有能够理解什么是问题,以及我要求我这样做,以便我开始。

有人可以请问我当前阵列中的单片意味着什么吗?以及如何从输入数组产生这4个数组输出?

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

2 个答案:

答案 0 :(得分: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>>,并且要好得多,但我会把它作为练习给你或其他人做。

答案 1 :(得分:0)

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;
        }