Python新手求助:计算集合minimum excludant的代码异常问题
关于计算Minimum Excludant(最小排斥元)的代码解析
首先明确:你贴的这段代码本身是可以正常工作的,我们一步步拆解逻辑帮你搞懂它:
- 函数
mex接收列表后,先转成集合set(my_list):集合的成员查询速度远快于列表,而且自动去重——MEX只关心元素是否存在,和出现次数无关,这么处理完全合理。 - 初始化
mex为0:MEX的定义是最小的未出现在集合中的非负整数,所以从0开始找是正确的起点。 - 循环判断:如果当前
mex在集合里,就把它加1,直到找到第一个不在集合里的数,返回这个数。
拿你测试的[1,0,2,4]举例:
- 转成集合是
{0,1,2,4} mex=0在集合里,加1变成1;mex=1在集合里,加1变成2;mex=2在集合里,加1变成3;mex=3不在集合里,循环结束,返回3——这完全符合MEX的结果。
如果你觉得代码“无法正常工作”,大概率是这两种情况:
- 你测试了包含负数的列表?比如
[-1, 0],代码返回1,这是符合标准MEX定义的(因为MEX只考虑非负整数); - 你对MEX的定义理解有误?比如误以为要找所有整数里最小的未出现数(包括负数),那这段代码确实不适用,但那已经不是标准的MEX了。
内容的提问来源于stack exchange,提问作者Vika
相关产品推荐
相关产品推荐

