如何从数组中按递增顺序创建单片列表(子列表)
本文关键字:列表 单片 创建 顺序 数组 | 更新日期: 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;
}