首页 > 解决方案 > 从现有数据集中删除数字并创建新数据集

问题描述

我有范围列表。现在我将获得数字列表,我必须从范围中删除数字并创建新范围。
所有连续的数字都应该在一个范围内,不连续的数字应该在单独的范围内。

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

我无法思考解决方案,任何建议都会有所帮助!

标签: javaalgorithm

解决方案


对于要删除的每个号码:

  1. 找到包含该数字的区间索引(如果有;如果没有这样的区间,你就完成了,可以考虑抛出)。
  2. 取决于:
    1. 如果要删除的号码是区间中唯一的号码,则删除整个区间。
    2. 否则,如果数字在间隔中是第一个或最后一个,则缩短间隔。
    3. 否则分成两个区间。

您可能希望对条件检查进行不同的编码,但这应该是基本思想。对于在列表中删除和插入间隔,List.remove(int)andList.add(int, E)方法应该很有用。

PS在你的Interval类中添加方法来确定是否包含一个数字,是第一个还是最后一个,并缩短前面或后面的间隔可能会很方便。甚至可能是一种分成两个区间的方法。


推荐阅读