演算法之插入區間

2021-10-10 06:07:52 字數 3444 閱讀 7740

題目

插入區間

給出乙個無重疊的 ,按照區間起始端點排序的區間列表。

在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。

示例 1:

輸入:intervals = [[1,3],[6,9]], newinterval = [2,5]

輸出:[[1,5],[6,9]]

示例 2:

輸入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newinterval = [4,8]

輸出:[[1,2],[3,10],[12,16]]

解釋:這是因為新的區間 [4,8] 與 [3,5],[6,7],[8,10] 重疊。

1.暴力方式

class

solution

// 陣列區間為空的情況

if(intervals == null || intervals.length ==0)

// 獲取當前插入區間的最大值和最小值

int newmin = newinterval[0]

;int newmax = newinterval[1]

;int startp =

0, allp =0;

// startp開始到有區間的位置方便後續結合 allp 一共結合了幾個區間

int[

] centerinterval =

newint[2

];// 用來存放中間新合起來的區間資料

int n = intervals.length;

for(

int i =

0; i < n; i++)if

(newmax > intervals[i][1

]&&((i+1)

== n ||

((i+1)

<=

(n-1

)&& intervals[i+1]

[0]> newmax)))

continue;}

// 判斷最小值在區間之前 1. i=0 之前 2. i != 0 之前

// 1.i=0 最小區間大於插入最小區間

// 2.i不為0,if(

(i ==

0&& intervals[i][0

]> newmin)

||(intervals[i][0

]> newmin &&

(i-1

)>=

0&& intervals[i-1]

[1]< newmin)

) allp +=1;

if(intervals[i][1

]>= newmax)if(

((i+1)

== n && newmax >= intervals[i][1

])||(newmax >= intervals[i][1

]&&((i+1)

<=

(n-1

)&& intervals[i+1]

[0]> newmax)))

continue;}

// 判斷最小值在區間之後 n 之後

if(i ==

(n-1

)&& intervals[i][1

]< newmin ||

(intervals[i][1

]< newmin &&

(i+1

)<=

(n-1

)&& intervals[i+1]

[0]> newmin)

)else

if(intervals[i+1]

[0]> newmax)

continue;}

// 判斷最大值是否在範圍內

if(intervals[i][0

]<= newmax && intervals[i][1

]>= newmax)

// 判斷最大值是否在區間外if(

((i+1)

== n && newmax >= intervals[i][1

])||(newmax >= intervals[i][1

]&&(i+1

)<=

(n-1

)&& intervals[i+1]

[0]> newmax)

) allp +=1;

break;}

// 陣列中的整個區間都在新新增的區間中

if(intervals[i][0

]> newmin && intervals[i][1

]> newmin && intervals[i][0

]< newmax && intervals[i][1

]< newmax)

startp +=1;

continue;}

int m = n - allp +1;

// 上面遍歷完

int[

] result =

newint

[m][2]

;for

(int k =

0; k < m; k++

)else

}else

else

if(k == startp)

else}}

return result;

}}

2.採用找上下區間的方式處理

class

solution

// 陣列區間為空的情況

if(intervals == null || intervals.length ==0)

int l = intervals.length;

int start =

0, end = l-1;

// 找出下區間

while

(start < l && intervals[start][1

]< newinterval[0]

)// 找出上區間

while

(end >=

0&& intervals[end][0

]> newinterval[1]

)int numl = l -

(end-start)

;int

result =

newint

[numl][2

];for(

int i =

0; i < numl; i++

)else

if(i == start)

else

if(end ==-1

)else

result[i]

= data;

}else

}return result;

}}

僅記錄。

演算法之插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...

演算法 插入區間

題目 給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果重疊,則合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 思路 1,先寫乙個方法,用於判斷兩個陣列是否重疊,...

Leetcode之插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...