基于区间最值判断第二个连续区间是否被第一个区间包含(严格/非严格)
判断区间包含关系(基于最值)
给定两个连续区间的最小值(min)和最大值(max),需判断第二个区间是否包含于第一个区间。注意:本问题与Python的range函数毫无关联。
说明:我无法获取每个区间的起始和结束值,仅能从上游获取区间的min和max。现有类似问题未采用最值进行判断,也未区分严格与非严格场景,我需要最简逻辑。尽管使用起止值的方案可行,但逻辑更复杂,因此不采用。
直观例子:人站立时,腰到膝盖的区间包含于从头到脚的更大区间;但头到腰的区间不包含于脖子到膝盖的区间。
以下是通过测试用例区分非严格和严格判断的场景:
非严格判断
非严格包含允许第二个区间的边界与第一个区间的边界重合,比如第二个区间的最大值等于第一个区间的最大值,或者最小值等于第一个区间的最小值,甚至两个区间完全相等。
def is_subrange(min1, max1, min2, max2): ... # 待实现 # 测试用例 assert is_subrange(2, 9, 5, 7) == True assert is_subrange(2, 9, 1, 3) == False assert is_subrange(2, 9, 7, 11) == False assert is_subrange(2, 9, 1, 11) == False assert is_subrange(2, 9, 6, 9) == True # 非严格:右边界重合 assert is_subrange(2, 9, 2, 4) == True # 非严格:左边界重合 assert is_subrange(2, 9, 2, 9) == True # 非严格:完全重合
严格判断
严格要求第二个区间完全处于第一个区间内部,边界不能重合,即使两个区间完全相等也不满足条件。
def is_strict_subrange(min1, max1, min2, max2): ... # 待实现 # 测试用例 assert is_strict_subrange(2, 9, 5, 7) == True # 完全内部,符合要求 assert is_strict_subrange(2, 9, 1, 3) == False # 左边界超出 assert is_strict_subrange(2, 9, 7, 11) == False # 右边界超出 assert is_strict_subrange(2, 9, 1, 11) == False # 两边都超出 assert is_strict_subrange(2, 9, 6, 9) == False # 右边界重合,不符合严格要求 assert is_strict_subrange(2, 9, 2, 4) == False # 左边界重合,不符合严格要求 assert is_strict_subrange(2, 9, 2, 9) == False # 完全重合,不符合严格要求
错误实现示例
以下实现逻辑错误,无法正确判断包含关系:
def is_subrange(min1, max1, min2, max2): return min1 <= min2 and max1 <= max2 # 错误:应该是max1 >= max2 def is_strict_subrange(min1, max1, min2, max2): return min1 < min2 and max1 < max2 # 错误:应该是max1 > max2
正确最简实现
非严格判断
要让第二个区间包含于第一个区间,只需要保证第一个区间的最小值小于等于第二个区间的最小值,同时第一个区间的最大值大于等于第二个区间的最大值:
def is_subrange(min1, max1, min2, max2): return min1 <= min2 and max1 >= max2
严格判断
严格包含需要第一个区间的最小值严格小于第二个区间的最小值,且第一个区间的最大值严格大于第二个区间的最大值:
def is_strict_subrange(min1, max1, min2, max2): return min1 < min2 and max1 > max2
内容的提问来源于stack exchange,提问作者Asclepius
相关产品推荐
相关产品推荐

