集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。
给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入: nums = [1,2,2,4]
输出: [2,3]
注意:
给定数组的长度范围是 [2, 10000]。
给定的数组是无序的。
来源:力扣(LeetCode)
1)现将原数组排序,找出重复的数字,保存为返回数组的第1元素;
2)组成新的不包含不重复数字的数组,缺少一个数字,排序该数组;
3) 将完整数组和缺失数组对比,找出不对等的数字,保存为返回数组的第2元素。
第3)步找出缺失的数字的方法与之前写的两篇blog类似或者相同:
综上,代码如下:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
"""
Created on Tue Jul 28 22:12:06 2020
@author: MRN_6
@github: https://github.com/WowlNAN
@blog: https://blog.csdn.net/qq_21264377
"""
def a(nums):
a=nums
l=len(a)
b=[]
a=sorted(a)
c=a[0]
d=0
e=1
for i in range(1, l):
d=a[i]
if c==d:
e+=1
if e>1:
b.append(c)
break
else:
if e>1:
b.append(c)
break
e=1
c=d
t=[]
for n in a:
if n!=c:
t.append(n)
t.append(b[0])
a=sorted(t)
l=len(a)
i=1
j=0
while i<l+1 and j<l:
if i==a[j]:
i+=1
j+=1
else:
b.append(i)
break
if len(b)<2:
b.append(i)
return b
print(a([1,5,3,2,2,7,6,4,8,9]))