错误的数字集合

集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。

给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

示例 1:

输入: nums = [1,2,2,4]
输出: [2,3]
注意:

给定数组的长度范围是 [2, 10000]。
给定的数组是无序的。

来源:力扣(LeetCode)


1)现将原数组排序,找出重复的数字,保存为返回数组的第1元素;

2)组成新的不包含不重复数字的数组,缺少一个数字,排序该数组;

3) 将完整数组和缺失数组对比,找出不对等的数字,保存为返回数组的第2元素。

第3)步找出缺失的数字的方法与之前写的两篇blog类似或者相同:

0~n-1中缺失的数字

消失的两个数字(python)


综上,代码如下: 

# -*- 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]))

猜你喜欢

转载自blog.csdn.net/qq_21264377/article/details/107646821