Java 处理数组中的重叠数字

Java 处理数组中的重叠数字,java,arrays,Java,Arrays,我的程序取一对数字,将它们相减,然后将它们之间的所有差异相加,得到一个总数 我的问题是有些数字重叠,我使用的是开始时间和结束时间。我需要找到一种方法来忽略重叠的数字,以便 {{10, 14}, {4, 18}, {19, 20}, {19, 20}, {13, 20} 返回总共16,而不是27。到目前为止,我已经创建了另一个名为hours的数组来检查已经存在的时间。下面是代码的这一部分: public static int monitoring(int[][] intervals) {

我的程序取一对数字,将它们相减,然后将它们之间的所有差异相加,得到一个总数

我的问题是有些数字重叠,我使用的是开始时间和结束时间。我需要找到一种方法来忽略重叠的数字,以便

{{10, 14}, {4, 18}, {19, 20}, {19, 20}, {13, 20}
返回总共
16
,而不是
27
。到目前为止,我已经创建了另一个名为hours的数组来检查已经存在的时间。下面是代码的这一部分:

public static int monitoring(int[][] intervals) {
    int sum = 0;
    int start = 0;
    int end = 0;
    boolean[] hours = new boolean[24];
    int count = 0;

    for(int i = 0; i < intervals.length; i++) {
        end = intervals[i][1];
        start = intervals[i][0];    
        for(int j = start; j < end; j++) {
            hours[j] = true;
            count++;
        sum += end - start;
        }
    }

    return sum;
公共静态int监视(int[]间隔){
整数和=0;
int start=0;
int end=0;
布尔值[]小时=新布尔值[24];
整数计数=0;
for(int i=0;i
我不知道您真正想要的是什么,可能有两种选择:

  • 您可能正试图获得最大值和最大值之间的差异 成对时为第二个元素,成对时为第一个元素的最小值
  • 您想计算给定时间内的唯一“点数”(或小时数) 间隔列表
  • 最简单的解决方案可以是:

                if (!hours[j]) {
                    hours[j] = true;
                    count++;
                }
    

    在这种情况下,您甚至不需要“sum”变量。

    解释“重叠数字”的含义由于不清楚这是什么意思。为什么返回16?使用了哪些对?我认为这是
    OP
    上的一个输入错误可能他指的是
    26
    No,似乎这是间隔的并集所覆盖的一天的小时数。通过重叠,我指的是,例如{10,14}和{4,18}自{4,18}起重叠将涵盖{10,14}.4,5,6,7,8,9,10,11,12,13,14,15,16,17,18。我建议对你的答案进行修改。考虑案例
    {4,8},{14,16}
    。我相信OP希望结果为6,而不是
    16-4
    。您的代码将给出正确的结果,但您的文本有点误导。感谢大家的建议。我发现添加了另一个for循环,例如:for(int x=0;x