如何将给定整数区间切分为连续无重叠等大小子区间,解决边界重合问题
区间切分无重叠问题解决方案
你当前代码的问题是子区间左边界计算逻辑导致边界重叠:所有子区间左边界直接按步长累加,和前一个区间的右边界数值完全相等。仅需要调整左边界的计算规则,首个区间左边界保持原始起始值,后续所有区间左边界在原计算逻辑基础上加1即可,完全不需要修改原有参数的使用方式。
修改后的代码如下:
def range_non_overlapping(range_left, range_right, range_per_cut, cut_num): ranges = [] for i in range(cut_num): # 仅调整左边界计算:非首个区间左边界+1避免重叠 current_left = range_left + i * range_per_cut if i == 0 else range_left + i * range_per_cut + 1 # 右边界逻辑保持原有规则,避免超出总区间范围 current_right = min(range_right, range_left + (i + 1) * range_per_cut) ranges.append(current_left) ranges.append(current_right) return ranges
效果验证
调用range_non_overlapping(40, 260, 55, 4),返回结果为[40, 95, 96, 150, 151, 205, 206, 260],和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者H.Jamil
相关产品推荐
相关产品推荐

