代码修复请求:查找列表极值间缺失最小数的逻辑错误
修复列表最小/最大值及区间内最小缺失数的代码问题
你的代码在处理测试用例pt=[1, 3, -3, -2, 8, -1]时输出错误,核心原因是嵌套循环的逻辑混乱,无法正确遍历最小值到最大值区间内的所有整数,导致提前误判了缺失的最小数。
原代码问题分析
- 嵌套的
for和while循环仅通过minimum_number + j与nums[i]比较,没有覆盖区间内的所有整数,当排序后数组存在连续序列时,会错误跳过真正的缺失值。 - 比如在测试用例
pt中,排序后数组为[-3,-2,-1,1,3,8],原代码会误将-1判定为缺失值,而实际区间内最小的缺失值是0。
修复后的代码
class Solution(object): def minmax(self, nums): sorted_nums = sorted(nums) min_val = sorted_nums[0] max_val = sorted_nums[-1] num_set = set(sorted_nums) # 查找[min_val, max_val]区间内不在列表中的最小整数 missing_min = None current = min_val while current <= max_val: if current not in num_set: missing_min = current break current += 1 return [min_val, missing_min, max_val] if __name__ == "__main__": pt = [2, -4, 8, -5, 9, 7] lt = [1, 3, -3, -2, 8, -1] print(Solution().minmax(pt)) # 输出 [-5, -3, 9] print(Solution().minmax(lt)) # 输出 [-3, 0, 8]
修复逻辑说明
- 排序与边界获取:先对数组排序,直接获取最小值和最大值。
- 快速查找优化:将数组元素存入集合,实现O(1)时间复杂度的存在性判断。
- 遍历找缺失值:从最小值开始逐个遍历整数,找到第一个不在集合中的数,即为区间内最小的缺失数。
- 结果返回:按要求返回包含最小值、缺失最小数、最大值的列表。
内容的提问来源于stack exchange,提问作者klaus19
相关产品推荐
相关产品推荐

