2015-03-13 39 views
1

我的程序需要一对数字并将它们相互减去,然后将所有差异从对中加起来备份。处理数组中的重叠数字

我的问题是,一些数字重叠,我使用开始和结束时间的数字。我需要找到一种方法,忽略重叠号码,这样的

{{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; 
+1

解释“重叠数字”的含义,因为它不清楚是什么意思。 – thermite 2015-03-13 18:12:38

+0

这是为什么返回16?哪些配对使用? – 2015-03-13 18:19:24

+0

我认为是'OP'上的拼写错误,他的意思可能是'26' – gtgaxiola 2015-03-13 18:21:37

回答

2

我不知道你是什么reaaly试图让,2个选项可能:

  1. 你可能想最大的 第二个元素之间获得的区别如果配对,并且最小的第一个元素成对
  2. 您想计算给定的 区间列表中唯一“点”(或小时)的数量。

简单的解决方案可能是:

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

在这种情况下,你甚至都不需要 “和” 变量。

+0

我建议您在答案中进行修订。考虑“{{4,8},{14,16}}”的情况。我相信OP希望结果​​是6,而不是'16-4'。你的代码会给出正确的结果,但是你的文本有点误导。 – RealSkeptic 2015-03-13 18:25:10

+0

谢谢大家的建议。我发现为循环添加另一个如:for(int x = 0; x Robert 2015-03-13 20:58:30