重疊區間的個數

2021-07-25 07:04:11 字數 3786 閱讀 2115

題目:給定多個可能的重疊的區間,找出重疊區間的個數。

區間的定義如下:

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,...