2026-03-21:找出缺失的元素。用go语言,给定一个整数数组 nums,其中的元素彼此不重复。 原先 nums 本应包含某个连续整数区间内全部的整数,但现在可能会漏掉一些。 这个区间的端点(最小

2026-03-21:找出缺失的元素。用go语言,给定一个整数数组 nums,其中的元素彼此不重复。 原先 nums 本应包含某个连续整数区间内全部的整数,但现在可能会漏掉一些。 这个区间的端点(最小 2026-03-21找出缺失的元素。用go语言给定一个整数数组 nums其中的元素彼此不重复。原先 nums 本应包含某个连续整数区间内全部的整数但现在可能会漏掉一些。这个区间的端点最小值、最大值都仍然在 nums 里存在。你的任务是找出该区间内那些没有出现在 nums 中的整数。将这些缺失的数按升序返回如果区间内没有缺失项则返回空列表。2 nums.length 100。1 nums[i] 100。输入 nums [5,1]。输出 [2,3,4]。解释最小整数为 1最大整数为 5因此完整的范围应为 [1,2,3,4,5]。缺失的整数为 2、3 和 4。题目来自力扣3731。一、程序整体执行流程程序分为两个部分main主函数负责输入和输出、findMissingElements核心函数负责找缺失元素。执行顺序main函数调用核心函数 → 核心函数分步处理 → 返回结果 → main函数打印结果。二、分步骤详细执行过程步骤1main函数初始化输入定义整数数组nums [5, 1]调用核心函数findMissingElements把数组[5,1]传入函数等待函数返回结果最后打印结果步骤2进入 findMissingElements 核心函数初始化变量函数一开始会创建3个关键变量用于后续计算mn存储数组的最小值初始值设为整数最大值保证任何数组元素都比它小mx存储数组的最大值初始值设为整数最小值保证任何数组元素都比它大has一个空的映射字典作用是快速判断某个数字是否存在于数组中ans空切片用来存储最终找到的缺失元素步骤3遍历数组更新最值 记录元素存在状态开始逐个遍历数组[5, 1]里的每一个数字第一次遍历数字 5比较当前最小值mn和 55 更小 →mn 更新为 5比较当前最大值mx和 55 更大 →mx 更新为 5把5存入映射has标记为数字5存在第二次遍历数字 1比较当前最小值mn5和 11 更小 →mn 更新为 1比较当前最大值mx5和 15 更大 →mx 保持 5 不变把1存入映射has标记为数字1存在✅ 遍历结束后结果数组最小值mn 1数组最大值mx 5映射has记录1、5 这两个数字存在步骤4遍历区间 [最小值1最大值-1]查找缺失元素已知完整区间是1 ~ 5我们只需要检查1和5之间的数字2、3、4判断是否在数组中遍历规则从mn1 2开始到mx-1 4结束逐个检查数字 2映射中没有记录 →判定为缺失加入结果列表数字 3映射中没有记录 →判定为缺失加入结果列表数字 4映射中没有记录 →判定为缺失加入结果列表✅ 此步骤结束后结果列表ans [2, 3, 4]步骤5函数返回结果main函数打印输出核心函数将结果[2,3,4]返回给 main 函数程序打印输出[2 3 4]与题目要求完全一致。三、时间复杂度分析时间复杂度O(n)n 代表输入数组的长度程序只做了两次线性遍历第一次遍历数组O(n)第二次遍历连续区间长度最大为 100题目限制是常数级别常数不影响复杂度总时间复杂度为 O(n)四、额外空间复杂度分析额外空间复杂度O(n)额外空间指除了输入和输出之外程序额外开辟的内存主要占用空间的是映射has最多存储 n 个元素数组所有元素其他变量最值、结果列表都是常数或输出空间不计入额外空间总额外空间复杂度为 O(n)总结执行过程初始化→遍历求最值记录元素→遍历区间找缺失→返回结果时间复杂度O(n)线性时间额外空间复杂度O(n)线性空间Go完整代码如下packagemainimport(fmtmath)funcfindMissingElements(nums[]int)(ans[]int){mn,mx:math.MaxInt,math.MinInt has:map[int]bool{}for_,x:rangenums{mnmin(mn,x)mxmax(mx,x)has[x]true}fori:mn1;imx;i{if!has[i]{ansappend(ans,i)}}return}funcmain(){nums:[]int{5,1}result:findMissingElements(nums)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-importmathfromtypingimportListdeffind_missing_elements(nums:List[int])-List[int]:mn,mxmath.inf,-math.inf hasset()forxinnums:mnmin(mn,x)mxmax(mx,x)has.add(x)ans[]foriinrange(mn1,mx):ifinotinhas:ans.append(i)returnansdefmain():nums[5,1]resultfind_missing_elements(nums)print(result)if__name____main__:main()C完整代码如下#includeiostream#includevector#includeunordered_set#includealgorithm#includeclimitsstd::vectorintfindMissingElements(std::vectorintnums){intmnINT_MAX;intmxINT_MIN;std::unordered_setinthas;for(intx:nums){mnstd::min(mn,x);mxstd::max(mx,x);has.insert(x);}std::vectorintans;for(intimn1;imx;i){if(has.find(i)has.end()){ans.push_back(i);}}returnans;}intmain(){std::vectorintnums{5,1};std::vectorintresultfindMissingElements(nums);for(inti0;iresult.size();i){std::coutresult[i];if(iresult.size()-1){std::cout ;}}std::coutstd::endl;return0;}