簡體   English   中英

計算Java中的區間並集覆蓋多少個整數

[英]Count how many integers are covered by union of intervals in java

我正在接受來自Hackerrank的在線挑戰,並且存在一個問題,即如何確定區間的並集涵蓋了多少個整數。 基本上,對於示例測試用例1(參見下圖),從第一行(1-3)的兩行中,我們可以得到整數1,2,3,而從第二行中,我們可以得到9,10, 11,12。 因此,最終輸出應為1,2,3,9,10,11,12,因此它將輸出7作為最終輸出。 但是,請參閱下面的實現以獲取更多信息。 提交代碼時,我通過了所有測試用例,沒有任何錯誤,但由於超時問題,除了5個測試用例之外。 因此,我只是想知道是否有人可以給我一些有關我的代碼有什么問題的反饋。 有人可以修復我的代碼來解決我的超時問題嗎?

提前致謝! 在此處輸入圖片說明

在此處輸入圖片說明

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()); 

由於L和R的范圍是0至1,000,000,000。 因此,1,000,000,000 * 100,000肯定會獲得TLE。 您必須避免內循環。 我的想法是

  • 排序所有間隔
  • 遍歷間隔和L(i)<R(i-1)然后設置L(i)= R(i-1)+1
  • unionSize = 0
  • 遍歷間隔和unionSize = unionSize +(Ri-Li + 1)
  • 返回unionSize

然后N的大O,最大循環數3 * 100,000

希望它能工作。如果以后再安排時間,我會為您編碼

我認為簡單易用的解決方案是將所有間隔編號都放入HashSet中,它將重復,然后您得到的HashSet的大小即聯合號間隔的數量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM