題目:給定多個可能的重疊的區間,找出重疊區間的個數。區間的定義如下:
class interval
}
首先,要定義區間的類,實現comparable介面,含有起點與止點的值和型別,還要重寫用於排序的compareto函式。
class
point
implements
comparable
//還需要實現compareto函式,以便排序
public
int compareto(point p)else
if (this.value > p.value)else
}}
其次,區間轉換為點,並將點排序,然後統計重疊的個數。
intmax =0,count = 1;
if (a == null || a.length == 0) return
max;
point points = new point[a.length*2];
for (int i=0;ilength;i++)
collections.sort(points);//排序
for(int i =0;ilength;i++)else
}return
max;}
這裡沒有按照偽**中給的樣式來寫,源於沒有發現r語言中能採用這種方式來寫,在谷歌是發現乙個r包intervals,它可以實現overlap功能,也就是我們這裡將用到的交集。
兩個區間集合之間的重疊個數計算:
> a=matrix(c(1:16),ncol = 2, byrow = true)
> a
[,1] [,2]
[1,] 1
2[2,] 3
4[3,] 5
6[4,] 7
8[5,] 9
10[6,] 11
12[7,] 13
14[8,] 15
16> to
<- intervals(a,closed = c( true, false ),type = "r")
> #集合to
> to
object
ofclass intervals
8 intervals over r:
[1, 2)
[3, 4)
[5, 6)
[7, 8)
[9, 10)
[11, 12)
[13, 14)
[15, 16)
> dim(to)
[1] 8
2> b <- matrix(c(2.121, 8,8, 9,6, 9,11, 12,3, 3),ncol = 2, byrow = true)
> b
[,1] [,2]
[1,] 2.121
8[2,] 8.000
9[3,] 6.000
9[4,] 11.000
12[5,] 3.000
3> from
<- intervals(b,closed = c( false, false ),type = "r")
> # 集合from
> from
object
ofclass intervals
5 intervals over r:
(2.121, 8)
(8, 9)
(6, 9)
(11, 12)
(3, 3)
> rownames(from) <- c(1:nrow(from))
> empty(to)
[1] false
false
false
false
false
false
false
false
> empty(from)
[1] false
false
false
false
true
> b1 <- interval_overlap(from, to)
warning message:
some empty 'from' intervals encountered. setting to na...
> b1
$`1`
[1] 234
$`2`
integer(0)
$`3`
[1] 4
$`4`
[1] 6
$`5`
integer(0)
> sum(lengths(b1))
[1] 5
對於輸入的是乙個集合,計算乙個集合內的區間重疊數
例子1
> b <- matrix(c(2, 8,8, 9,6, 9,11, 12,3, 3),ncol = 2, byrow = true)
> b
[,1] [,2]
[1,] 2
8[2,] 8
9[3,] 6
9[4,] 11
12[5,] 3
3> from <- intervals(b,closed = c( t, t ),type = "r")
> from
object of class intervals
5 intervals over r:
[2, 8]
[8, 9]
[6, 9]
[11, 12]
[3, 3]
> b1 <- interval_overlap(from, from)
> b1
[[1]]
[1] 123
5[[2]]
[1] 123
[[3]]
[1] 123
[[4]]
[1] 4
[[5]]
[1] 1
5> (sum(lengths(b1))-nrow(b))/2
[1] 4
例子2> b <- matrix(c(1, 5,10, 15,5, 10,20, 30),ncol = 2, byrow = true)
> b
[,1] [,2]
[1,] 1
5[2,] 10
15[3,] 5
10[4,] 20
30> from <- intervals(b,closed = c( t, t ),type = "r")
> from
object of class intervals
4 intervals over r:
[1, 5]
[10, 15]
[5, 10]
[20, 30]
> b1 <- interval_overlap(from, from)
> b1
[[1]]
[1] 1
3[[2]]
[1] 2
3[[3]]
[1] 123
[[4]]
[1] 4
> (sum(lengths(b1))-nrow(b))/2
[1] 2
啦啦啦啦,發現書上的結果錯了。
這裡寫**片
刪除重疊的區間的個數
刪除重疊的區間的個數 package my import j a.util.arrays public class nooverlapintervals2 將所有區間按照起始時間排序 arrays.sort intervals v1,v2 v1 0 v2 0 用乙個變數end 記錄前期的最小結束時間...
演算法練習 重疊區間個數
一 題目描述 給定多個可能重疊的區間,找出重疊區間的個數。舉例如下 輸入 1,5 10 15 5 10 20 30 輸出 2 說明 題意應該是找出重疊區間中區間的最大個數,當沒有區間重疊時,重疊個數最大為1 比如 輸入為 1,5 10 15 則輸出為1 輸入為 1,2 2,3 3,4 4,5 則輸出...
LeetCode 435 不重疊的區間個數
給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。示例 1 輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 移除 1,3 後,剩下的區間沒有重疊。示例 2 輸入 1,2 1,...