56. 合并区间 golang
生活随笔
收集整理的這篇文章主要介紹了
56. 合并区间 golang
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
56. 合并區(qū)間
給出一個(gè)區(qū)間的集合,請(qǐng)合并所有重疊的區(qū)間。
示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區(qū)間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].
示例 2:
輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區(qū)間 [1,4] 和 [4,5] 可被視為重疊區(qū)間。
Code
func merge(intervals [][]int) [][]int {n := len(intervals)sort.Slice(intervals, func(a, b int) bool {return intervals[a][0] < intervals[b][0]})// 如果當(dāng)前區(qū)間的左端點(diǎn)在前一個(gè)區(qū)間的右端點(diǎn)之后,那么他們不會(huì)重合,我們可以直接將這個(gè)區(qū)間插入 merged 中;// 否則,他們重合,我們用當(dāng)前區(qū)間的右端點(diǎn)更新前一個(gè)區(qū)間的右端點(diǎn) end 如果前者數(shù)值比后者大的話。for i := 0;i < n-1;i++ {if intervals[i][1] >= intervals[i+1][0] {if intervals[i+1][1] > intervals[i][1] {intervals[i][1] = intervals[i+1][1]}// 向前合并// [1,6], [2, 6] --> [1,6]intervals = append(intervals[:i+1], intervals[i+2:]...)i--n--}}return intervals }代碼都寫完了,出來這么一個(gè)測(cè)試用例(split切片有借鑒意義)
輸入: [[1,4],[5,6]] 輸出 [[1,6]] 預(yù)期結(jié)果 [[1,4],[5,6]]附贈(zèng)錯(cuò)誤代碼
func merge(intervals [][]int) [][]int {if len(intervals) == 0 {return intervals}var split [][]intvar list []intvar res [][]int//nums = [][]int{{1,3},{2,6},{8,10},{15,18}}list = make([]int, intervals[len(intervals)-1][len(intervals[len(intervals)-1])-1]+2)for _, v := range intervals {min := v[0]max := v[len(v)-1]for i:=min; i<=max; i++ {list[i] = i}}//fmt.Println(list)// [0 1 2 3 4 5 6 0 8 9 10 0 0 0 0 15 16 17 18 0]var temp []intfor _, v := range list {if v != 0 {temp = append(temp, v)} else {if len(temp) != 0 {split = append(split, temp)}temp = []int{}}}// [[1 2 3 4 5 6] [8 9 10] [15 16 17 18]]for _, v := range split {res = append(res, []int{v[0], v[len(v)-1]})}return res }func min(a, b int) int {if a < b {return a}return b }func max(a, b int) int {if a < b {return b}return a }總結(jié)
以上是生活随笔為你收集整理的56. 合并区间 golang的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 41. 缺失的第一个正数 golang
- 下一篇: 输卵管堵塞治好多少钱