计算java

时间:2017-02-16 04:23:09

标签: java integer union hashset

我正在接受来自Hackerrank的在线挑战,并且有一个问题是关于找到间隔联合覆盖多少整数。基本上,对于样本测试用例1(见下图),在两行之间,从第一行(1-3),我们可以得到整数1,2,3,从第二行,我们可以得到9,10, 11,12。因此,最终输出应为1,2,3,9,10,11,12,因此它将打印出7作为最终输出。但是,请参阅下面的实现以获取更多信息。当我提交我的代码时,由于超时问题,我通过所有测试用例没有错误,除了5个测试用例。所以,我只是想知道是否有人可以给我一些关于我的代码有什么问题的反馈。任何人都可以修复我的代码来解决我的超时问题吗?

提前致谢! enter image description here

enter image description here

Hashset <Integer>mytree = new HashSet<Integer>();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=0;i<N;i++){
    int Li = sc.nextInt;
    int Ri = sc.nextInt;
    int current =Li;
    while(current<Ri){
        mytree.add(current);
        current++;
    }
 }

 System.out.println(mytree.size()); 

2 个答案:

答案 0 :(得分:2)

由于L和R的范围从0到1,000,000,000。 因此,1,000,000,000 * 100,000肯定会获得TLE。 你必须避免内循环。 我的想法是,

  • 对所有间隔进行排序
  • 循环通过间隔并且L(i)&lt;然后,R(i-1)设定L(i)= R(i-1)+1
  • unionSize = 0
  • 循环通过间隔和unionSize = unionSize +(Ri-Li + 1)
  • return unionSize

然后N的大O,最大循环数3 * 100,000

希望它能奏效 如果我稍后管理时间,我会为你编码

答案 1 :(得分:0)

我认为简单易行的解决方案只是将所有区间数放入HashSet中,它将需要重复,然后你只需得到HashSet的大小,这是联合号码间隔的数量