日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

56. 合并区间 golang

發布時間:2023/11/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 56. 合并区间 golang 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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] 可被視為重疊區間。

Code

func merge(intervals [][]int) [][]int {n := len(intervals)sort.Slice(intervals, func(a, b int) bool {return intervals[a][0] < intervals[b][0]})// 如果當前區間的左端點在前一個區間的右端點之后,那么他們不會重合,我們可以直接將這個區間插入 merged 中;// 否則,他們重合,我們用當前區間的右端點更新前一個區間的右端點 end 如果前者數值比后者大的話。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 }

代碼都寫完了,出來這么一個測試用例(split切片有借鑒意義)

輸入: [[1,4],[5,6]] 輸出 [[1,6]] 預期結果 [[1,4],[5,6]]

附贈錯誤代碼

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 }

總結

以上是生活随笔為你收集整理的56. 合并区间 golang的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。