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