嘿,伙计们!在本教程中,我们将了解这个简单的问题,即在一个数字列表中寻找丢失和重复的元素。让我们通过一个例子来理解这个问题,考虑下面给出的n=6的数字列表。
| 1 | 2 | 4 | 5 | 5 | 6 |
缺少的数字是1,2,3.... n中不存在的数字,重复的数字是在元素中出现两次的数字。
在上面提到的案例中,缺失的数字是3,重复的数字是5。实际结果必须是这样的。1 2 3 4 5 6,没有重复数字和缺失数字。
手动查找缺失和重复的元素
现在,手动方法是遍历列表并检查每个数字的计数。
如果任何一个数字的计数等于2*n,那么我们就找到了重复的数字,然后遍历元素,检查每个数字的出现:1,2,3,等等。
如果这些数字中的任何一个不存在,那么就返回这个数字作为缺失的数字。
这种方法的问题是,这种方法很慢,对于一个简单的问题来说,引入了太多的步骤,而且,可以用更好的方式完成。
寻找缺失和重复元素的更好方法
因此,我们将创建一个额外的数组,考虑到一个元素是否被访问。该数组的大小与n的值相同。
最初,所有的值都等于0(未见),当一个元素在数组中被看到时,它在最终数组中的值被设置为1(见)。
这种情况一直持续到数组的结束。我们必须计算两件事:重复的数字和丢失的数字。
如果在任何时候,被设置的数字的值已经被设置,那么这就意味着这个数字是重复的数字。
现在,为了计算缺失的数字,我们将最后一次遍历最终数组,并检查最终数组中哪个数字的值仍然为0,这意味着该数字从未出现过,因此它是数组中缺失的数字。
我们将以列表的形式返回这两个值:第一个是重复的数字,第二个是丢失的数字。
在Python中实现
我希望这对你来说是清楚的。现在让我们看看寻找缺失和重复元素的代码实现以及代码的输出样本。
def find_miss_repeat(arr,n):
final_array = [0 for i in range(n)]
l = [0,0]
for i in arr:
if(final_array[i-1]==1):
l[0] = i
else:
final_array[i-1] = 1
for i in range(len(final_array)):
if(final_array[i]==0):
l[1] = i+1
return l
x = find_miss_repeat([1,2,4,5,5,6],6)
print("Repeating Number: ",x[0])
print("Missing Number: ",x[1])
代码的输出如下所示:
Repeating Number: 5
Missing Number: 3
总结
我希望这个概念对你来说是清楚的。你可以自己用天真和快速的方法来尝试。同样的逻辑也适用于所有的编程语言。
谢谢你阅读本教程!编码愉快😇