2 回答
TA贡献1111条经验 获得超0个赞
这是您的列表,计算出到下一个项目的“距离”:
32(122), 154(3), 157(3), 160(194), 354(9), 363(317), 680(2), 682(159), 841(4), 845(26), 871(61), 932(4), 936(4), 940()
这里按“距离”降序排列的相同列表:
363(317), 160(194), 682(159), 32(122), 871(61), 845(26), 354(9), 841(4), 932(4), 936(4), 154(3), 157(3), 680(2), 940()
你需要什么 - 拿前 5 项:
363(317), 160(194), 682(159), 32(122), 871(61)
并在这些项目之后“拆分”您的原始列表:
32(122) // split 4
154(3), 157(3), 160(194) // split 2
354(9), 363(317) // split 1
680(2), 682(159) // split 3
841(4), 845(26), 871(61) // split 5
932(4), 936(4), 940()
它将为您提供 6 组(您剪下 5 个最大的空间)
TA贡献1880条经验 获得超4个赞
在代码中:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
List<int> signals = new List<int>() { 680, 841, 154, 940, 160, 157, 936, 354, 363, 682, 871, 932, 845, 32};
signals.Sort();
List<GapData> gapsData = new List<GapData>();
for(int i = 0; i < signals.Count - 1; i++)
{
GapData newGap = new GapData() { Index = i, Span = signals[i + 1] - signals[i] };
gapsData.Add(newGap);
}
gapsData.Sort();
gapsData = gapsData.Take(5).ToList(); //Keep 5 biggest gaps
gapsData = gapsData.OrderBy(i => i.Index).ToList(); //sort on index
List<List<int>> groupedList = new List<List<int>>();
int index = 0;
List<int> currentGroup = new List<int>();
groupedList.Add(currentGroup);
for(int i = 0; i < signals.Count; i++)
{
if (index < 5 && gapsData[index].Index < i)
{
currentGroup = new List<int>();
groupedList.Add(currentGroup);
index++;
}
currentGroup.Add(signals[i]);
}
}
public class GapData:IComparable<GapData>
{
public GapData()
{
}
public int Index { get; set; }
public int CompareTo(GapData other)
{
return - Span.CompareTo(other.Span);
}
public int Span { get; set; }
}
}
}
- 2 回答
- 0 关注
- 206 浏览
添加回答
举报