java - 从现有数据集中删除数字并创建新数据集
问题描述
我有范围列表。现在我将获得数字列表,我必须从范围中删除数字并创建新范围。
所有连续的数字都应该在一个范围内,不连续的数字应该在单独的范围内。
public class DriverClass{
public static void main(String[] args){
List<Interval> intervals = new ArrayList<Interval>();
Interval i1 = new Interval(5, 9);
Interval i2 = new Interval(12, 23);
intervals.add(i1);
intervals.add(i2);
List<Integer> numbersToBeDeleted = Arrays.asList(6, 7, 19, 21);
}
}
删除 6, 7, 19, 21 后
预期输出:[5,5], [8,9], [12,18], [20,20], [22,23]
class Interval {
int start, end;
Interval(int start, int end) {
this.start = start;
this.end = end;
}
}
我无法思考解决方案,任何建议都会有所帮助!
解决方案
对于要删除的每个号码:
- 找到包含该数字的区间索引(如果有;如果没有这样的区间,你就完成了,可以考虑抛出)。
- 取决于:
- 如果要删除的号码是区间中唯一的号码,则删除整个区间。
- 否则,如果数字在间隔中是第一个或最后一个,则缩短间隔。
- 否则分成两个区间。
您可能希望对条件检查进行不同的编码,但这应该是基本思想。对于在列表中删除和插入间隔,List.remove(int)
andList.add(int, E)
方法应该很有用。
PS在你的Interval
类中添加方法来确定是否包含一个数字,是第一个还是最后一个,并缩短前面或后面的间隔可能会很方便。甚至可能是一种分成两个区间的方法。