ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

合并区间

2020-04-16 14:53:40  阅读:241  来源: 互联网

标签:10 int 合并 len intervals result 区间 append


试题地址:https://leetcode-cn.com/problems/merge-intervals/

试题思路:
1、只有一个区域时,直接返回
2、将区间以下界进行排序
3、利用3维数组进行dp,每次比较临近两个区间,注意最后一个区间
4、区间比较时,需要考虑第一个区间上界是大于第二个区间的下界还是上界
比如输入:[[1 3] [15 18] [2 6] [8 10] [2 9]]
[[[1 3] [2 6] [2 9] [8 10] [15 18]]
[[1 6] [2 10] [15 18]]
[[1 10] [15 18]]
[[1 10] [15 18]]]

试题代码:

package main

import (
    "fmt"
    "sort"
)

func main() {
    intervals := [][]int{
        {1, 3},
        {2, 6},
        {8, 10},
        {2, 9},
        {15, 18},
    }
    // intervals := [][]int{
    //     {1, 6},
    //     {4, 5},
    // }
    fmt.Println(merge(intervals))
}

//试题地址:https://leetcode-cn.com/problems/merge-intervals/
func merge(intervals [][]int) [][]int {
    if len(intervals) == 1 {
        return intervals
    }

    result := [][][]int{}
    sort.Slice(intervals, func(i, j int) bool {
        return intervals[i][0] < intervals[j][0]
    })

    result = append(result, intervals)
    i := 0
    for {
        k := 0
        result = append(result, [][]int{})
        for j := 0; j < len(result[i])-1; j++ {
            result[i+1] = append(result[i+1], []int{})
            fmt.Println(result)
            if result[i][j][1] >= result[i][j+1][0] {
                if result[i][j][1] >= result[i][j+1][1] {
                    result[i+1][k] = append(result[i+1][k], result[i][j][0])
                    result[i+1][k] = append(result[i+1][k], result[i][j][1])
                } else {
                    result[i+1][k] = append(result[i+1][k], result[i][j][0])
                    result[i+1][k] = append(result[i+1][k], result[i][j+1][1])
                }
                j++
            } else {
                result[i+1][k] = append(result[i+1][k], result[i][j][0])
                result[i+1][k] = append(result[i+1][k], result[i][j][1])
            }
            k++
            if j == len(result[i])-2 {
                result[i+1] = append(result[i+1], []int{})
                result[i+1][k] = append(result[i+1][k], result[i][j+1][0])
                result[i+1][k] = append(result[i+1][k], result[i][j+1][1])
            }
        }
        fmt.Println(result)
        if len(result[i]) == len(result[i+1]) || len(result[i]) == 1 {
            break
        }
        i++
    }
    return result[i]
}
View Code

 

标签:10,int,合并,len,intervals,result,区间,append
来源: https://www.cnblogs.com/ybf-yyj/p/12712860.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有