Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python设计和实现跟踪范围的接口_Python - Fatal编程技术网

使用python设计和实现跟踪范围的接口

使用python设计和实现跟踪范围的接口,python,Python,1:添加范围-跟踪提供的输入范围。添加与当前跟踪范围部分重叠的范围应跟踪添加范围中尚未跟踪的任何数字 e.g. AddRange(10,180)- start tracking range 10-180 AddRange(150,200)- start tracking range 150-200 AddRange(250,500) - start tracking range 250-500 e.g. Ranges tracked [10-200],[250-500] RemoveRang

1:添加范围-跟踪提供的输入范围。添加与当前跟踪范围部分重叠的范围应跟踪添加范围中尚未跟踪的任何数字

e.g. AddRange(10,180)- start tracking range 10-180
AddRange(150,200)- start tracking range 150-200
AddRange(250,500) - start tracking range 250-500
e.g. Ranges tracked [10-200],[250-500]

RemoveRange(50,150) - stop tracking range 50-150 ([10-149], [151-200],[250-500])
RemoveRange(400,600) - stop tracking range 400-500 ([10-49],[250-399])
Remove range(600,800) - no-op as none of the ranges were tracked
可能的解决办法

2:删除范围:从被钉的数字中删除提供的数字范围。部分跟踪范围的删除范围操作应删除该范围内已跟踪的所有数字

e.g. AddRange(10,180)- start tracking range 10-180
AddRange(150,200)- start tracking range 150-200
AddRange(250,500) - start tracking range 250-500
e.g. Ranges tracked [10-200],[250-500]

RemoveRange(50,150) - stop tracking range 50-150 ([10-149], [151-200],[250-500])
RemoveRange(400,600) - stop tracking range 400-500 ([10-49],[250-399])
Remove range(600,800) - no-op as none of the ranges were tracked
可能的解决办法

如何实现这一点

此外,还需要以面向对象的方式实现整个过程:

伪代码:

class RangeModule:
    def AddRange(self, lower, upper):
        pass

    def QueryRange(self, lower, upper):
        return True

    def RemoveRange(self, lower, upper):
        pass

保留按起点排序的配对范围列表。您有责任确保范围不重叠,并且它们彼此不相邻-如果相邻,则合并它们

因为它们是经过排序的,并且不重叠,所以您可以快速找到具有输入范围的重叠。使用此选项可以处理添加、查询和删除

class RangeModule:
    def AddRange(self, lower, upper):
        pass

    def QueryRange(self, lower, upper):
        return True

    def RemoveRange(self, lower, upper):
        pass