前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021-07-20:最小区间。你有 k 个 非递减排列 的整数列表。找到一个 最小 区间,使得 k 个列表中的每个列表至少有一

2021-07-20:最小区间。你有 k 个 非递减排列 的整数列表。找到一个 最小 区间,使得 k 个列表中的每个列表至少有一

作者头像
福大大架构师每日一题
发布2021-08-05 16:28:47
5540
发布2021-08-05 16:28:47
举报

2021-07-20:最小区间。你有 k 个 非递减排列 的整数列表。找到一个 最小 区间,使得 k 个列表中的每个列表至少有一个数包含在其中。我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。

福大大 答案2021-07-20:

[[4,10,15,24,26], [0,9,12,20], [5,18,22,30]]

有序表:0,4,5。序号:1,1,1。有序表差值为5。

有序表:4,5,9。序号:1,2,1。有序表差值为5。

有序表:5,9,10。序号:2,2,1。有序表差值为5。

有序表:9,10,18。序号:2,2,2。有序表差值为9。

有序表:10,12,18。序号:2,3,2。有序表差值为8。

有序表:12,15,18。序号:3,3,2。有序表差值为6。

有序表:15,18,20。序号:3,4,2。有序表差值为5。

有序表:18,20,24。序号:4,4,2。有序表差值为6。

有序表:20,22,24。序号:4,4,3。有序表差值为4。差值最小,这个就是需要的返回值。

有序表:x,22,24。序号:5,4,3。结束了。

代码用golang编写。代码如下:

代码语言:javascript
复制
package main

import (
    "fmt"
    "sort"
)

func main() {
    nums := [][]int{{4, 10, 15, 24, 26}, {0, 9, 12, 20}, {5, 18, 22, 30}}
    ret := smallestRange(nums)
    fmt.Println(ret)
}

type Node struct {
    value int
    arrid int
    index int
}

func smallestRange(nums [][]int) []int {
    N := len(nums)
    orderSet := make([]*Node, 0)
    for i := 0; i < N; i++ {
        orderSet = append(orderSet, &Node{nums[i][0], i, 0})
    }
    set := false
    a := 0
    b := 0
    for len(orderSet) == N {
        sort.Slice(orderSet, func(i, j int) bool {
            if orderSet[i].value != orderSet[j].value {
                return orderSet[i].value < orderSet[j].value
            } else {
                return orderSet[i].arrid < orderSet[j].arrid
            }
        })
        min := orderSet[0]
        max := orderSet[len(orderSet)-1]
        if !set || (max.value-min.value < b-a) {
            set = true
            a = min.value
            b = max.value
        }
        min = orderSet[0]
        orderSet = orderSet[1:]
        arrid := min.arrid
        index := min.index + 1
        if index != len(nums[arrid]) {
            orderSet = append(orderSet, &Node{nums[arrid][index], arrid, index})
        }
    }
    return []int{a, b}
}

执行结果如下:

***

[左神java代码](https://github.com/algorithmzuo/coding-for-great-offer/blob/main/src/class19/Code04_SmallestRangeCoveringElementsfromKLists.java)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档