演算法之插入區間

2021-09-11 21:05:08 字數 1741 閱讀 7059

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

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

示例 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] 重疊。

思路:先找到能合併的位置,不能合併的放到res;然後進行合併;合併完後,將不能合併的加入到res

static

public

class

interval

interval

(int s,

int e)

}static

class

solution

//解題思路

//(1)先用while迴圈換來找到 start 值小於 該區間start的 pre 和 cur (如果能夠合併,就必定 是與這兩者之一合併

//(2) 然後用while迴圈找到不能繼續合併的區間

interval pre_interval=null;

interval cur_interval=null;

int pos=0;

//嘗試尋找能把 newinterval夾在中間的間隔

//需要考慮的情況有: (1)找到了,但pre為null (2)找到了,能不能跟pre合併 (3)找到了,能不能跟cur合併 (4)找不到

while

(possize()

) pos++;}

else

}//如果一直找不到呢

if(pos==intervals.

size()

)else

}else

else

}//然後看一下 呢哇interval能不能和cur合併 (1)如果不能合併 (2)能夠合併,合併一些後就不能合併了 (3)跟剩下所有都能合併

//找到不能繼續合併的位置:

int flag=0;

for(

int i=pos;isize()

;i++

)else

}else}if

(flag==0)

}return res;

}}

class

solution

int len=intervals.

size()

;int cur_pos=0;

interval cur_interval;

//將哪些肯定不相交的先放進去

while

(cur_poselse

}//合併所有能夠合併的 只要能保證 newinterval的end大於等於 cur的start,就一定能相交

while

(cur_poselse

} res.

add(newinterval)

;while

(cur_posreturn res;

}}

演算法之插入區間

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

演算法 插入區間

題目 給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果重疊,則合併區間 示例 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,...