題目:
給出乙個區間的集合,請合併所有重疊的區間。
思路:示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].
示例 2:
輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
將陣列進行預排序(o(logn)), 排序後的能夠合併的陣列一定是連在一起的, 在進行一次遍歷就可以判斷相鄰的陣列是否可以合併
ruby
go# @param intervals
# @return
def merge(intervals)
return intervals if intervals.empty?
# 按陣列第一位排序
arr = intervals.sort_by
new_arr = [arr[0]]
i, j = 0, 1
# 遍歷比較
while j < arr.size
x = new_arr[i]
y = arr[j]
#重疊條件,即前乙個區間的右區間大於等於後乙個區間的左區間
if x[1] < y[0]
new_arr << y
i += 1
else
x[1] = [x[1], y[1]].max
endj += 1
endnew_arr
end
同樣的邏輯 ruby 用了46ms, go用了12ms, 快樂和效能總會有個平衡func merge(intervals int) int
//排序
sort.slice(intervals, func(i, j int) bool )
new_intervals := int
i, j := 1, 0
// 遍歷
for i < len(intervals)
}else
i++}
return new_intervals
}
Leetcode 56 合併區間
對所有區間按起點位置進行排序 遍歷到k點後的 l,r 已知的包含k點的最大區間 遍歷到k 1點,若該起點屬於 l,r 那麼可能擴充套件這個區間的終點,r max r,k 1點的end definition for an interval.struct interval interval int s,...
LeetCode 56 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。解題思路 1...
LeetCode 56 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。題意還是好理...