間隔問題3 No 58

2021-08-26 19:20:20 字數 953 閱讀 1139

問題:

給一組間隔,找出乙個點,使得穿過改點的間隔數量最大, 時間複雜度不能超過 o(n lg n)。比如有一組間隔為[1, 5] [ 3, 7] [2, 4] [8, 9], 那麼對於點 3.5, 有3個間隔都包含這個點,但是對於點 8.5,只有乙個間隔包含該點。所以,最後答案是 3.5. (當然,3.6, 或者 3.7 都可以)。

分析:對於一組間隔,我們把它所有間隔的起始值和結束值放在一起排序,每遇到乙個間隔的起始值,我們把個數加1,遇到乙個結束值,我們把個數減1,這樣,我們可以得到最大個數。對於 「點」 的值,它一定是在乙個結束值和乙個起始值之間。

**如下:

public class test 

//store the interval end values into the list

for (int j = 0; j < end.length; j++)

//sort

collections.sort(list);

for (int i = 0; i < list.size(); i++)

} else

currentinterval--;

}

} return pointvalue; }

public static void main(string args) ;

//end value of the interval

float end = ;

system.out.println(new test().findpoint(start, end)); }}

class point implements comparable

public int compareto(point o) else if (value == ((point)o).value)

return -1;

}}

參考:

間隔問題(時間間隔,日期間隔等)

對於求間隔問題,一般都可以利用通法 選取共同起點 取模運算 每組資料輸出一行,表示最少經過的分鐘數。輸入樣例 27 00 7 00 7 00 8 00 輸出樣例060 include using namespace std int main return 0 題目描述 有兩個日期,求兩個日期之間的天...

Interval 間隔問題

2018 09 07 09 03 14 一 merge intervals 問題描述 問題求解 public listmerge listintervals int start intervals.get 0 start int end intervals.get 0 end for int i 1...

奇偶數間隔排序問題

題目 對乙個陣列,將陣列中偶數從大到小排序,奇數從小到大排序,奇數和偶數交叉著放且輸出陣列第一位放奇數,若奇數和偶數不等長,則把剩下的直接放到陣列中。includevoid main int strodd 20 int streven 20 printf 輸入一組整數 n gets strs int...