唯一坐标转换问题

简介: 现在有一个二维坐标组成的数组,例如[[0,7],[8,10],[12,19],[13,15],[2,9],[19,22],[25,27],[30,33]];这些坐标可以按照以下规则进行转换,例如:1.

现在有一个二维坐标组成的数组,例如
[[0,7],[8,10],[12,19],[13,15],[2,9],[19,22],[25,27],[30,33]];

这些坐标可以按照以下规则进行转换,例如:

1.坐标之间可以组成连续的坐标,则这些坐标可以转化为一个坐标,
[0,7] & [8,10] -> [0,10]

2.坐标之间存在包含关系,则这些坐标可以转换为一个坐标,
[12,19] & [13,15] -> [12,19]

需要经过重新计算将数组内的坐标转换为唯一坐标(即 既不包含(或者被包含)其他坐标,也不能和其他坐标连续的坐标),例子里的坐标的转化结果为:
[[0,7],[8,10],[12,19],[13,15],[2,9],[19,22],[25,27],[30,33]]
->
[[0,10],[12,22],[25,27],[30,33]]

请写出转化算法:
def merge(list):

def by_rule_merge_ranges(list):
    merge_list = []
    def _merge(ranges):
        copy_ranges = copy.deepcopy(ranges)
        ranges_length = len(ranges)-1
        start_offset = copy_ranges[0][0]
        end_offset = copy_ranges[0][1]
        for j in range(ranges_length):
            if j < ranges_length:
                next_start_offset = ranges[j + 1][0]
                next_end_offset = ranges[j + 1][1]
                if start_offset <= (next_end_offset + 1) and start_offset >= next_start_offset and end_offset >= next_end_offset:
                    start_offset = next_start_offset
                    copy_ranges.remove(ranges[j+1])
                elif end_offset >= (next_start_offset - 1) and end_offset <= next_end_offset and start_offset <= next_start_offset:
                    end_offset = next_end_offset
                    copy_ranges.remove(ranges[j + 1])
                elif start_offset >= next_start_offset and end_offset <= next_end_offset:
                    start_offset = next_start_offset
                    end_offset = next_end_offset
                    copy_ranges.remove(ranges[j + 1])
                elif start_offset <= next_start_offset and end_offset >= next_end_offset:
                    copy_ranges.remove(ranges[j + 1])
        copy_ranges.remove(copy_ranges[0])
        merge_list.append({
            'startOffset': start_offset,
            'endOffset': end_offset,
            'count': 0
        })
        if len(copy_ranges) == 0:
            return 
        else:
            _merge(copy_ranges)
    _merge(list)
    return merge_list
目录
相关文章
|
小程序 数据安全/隐私保护 开发者
【已解决】开发者扫码登录提示“需要验证小程序密码”
开发者扫码登录提示“需要验证小程序密码”
1068 0
【已解决】开发者扫码登录提示“需要验证小程序密码”
|
监控 物联网 区块链
新技术趋势与应用:新兴技术的发展前景与实践探索
【5月更文挑战第25天】在21世纪的科技浪潮中,新兴技术如区块链、物联网、虚拟现实等正以前所未有的速度发展,引领着全球的创新潮流。这些技术不仅改变了我们的生活方式,也正在重塑着社会的运行模式。本文将深入探讨这些新兴技术的发展趋势和应用场景,以及它们如何影响我们的生活和社会。
链动 2 + 1 商业模式:弊端、解决方案、合法性与玩法
链动2+1模式是一种依托科技和数字技术的新型分销模式,主要通过增加贡献、帮扶机制、换位机制、合伙机制等方式解决团队发展难题,提高粘性和复购率。该模式以销售产品为主,不构成传销,通过设置多种身份和奖励机制,鼓励用户积极参与,提高销售效率。以499元某品牌白酒为例,展示了具体的玩法和奖励分配方式。
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
计算机视觉 Python
使用YOLOv8和PySimpleGUI构建目标计数GUI
使用YOLOv8和PySimpleGUI构建目标计数GUI
|
Ubuntu Java Linux
使用阿里云服务器开我的世界基岩版服务器
想和好友玩我的世界手机版但是不在同一个局域网那么这是你们最好的选择,那就是自己动手开一个。
1100 0
使用阿里云服务器开我的世界基岩版服务器
|
监控 网络协议 物联网
IPv4与IPv6的区别及其对企业网络建设的影响
随着互联网的蓬勃发展,人们越来越需要IP地址,以实现和娱乐。目前广泛使用的IP地址协议有两种:IPv4和IPv6。本文将探讨这两种协议的区别,并分析它们对企业网络建设的影响。
magisk安装教程 新手专属!
今天小编为大家带来的是Magisk通用安装教程,在开始安装Magisk之前请确保你的手机已经解锁并且刷了第三方rec。
2688 0