leetcode 56 合併區間

2021-10-06 04:22:47 字數 1199 閱讀 2207

題目:

給出乙個區間的集合,請合併所有重疊的區間。

示例 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

# @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

go

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

}

同樣的邏輯 ruby 用了46ms, go用了12ms, 快樂和效能總會有個平衡

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 可被視為重疊區間。題意還是好理...