LeetCode 645. 错误的集合(C、C++、python)

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

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

示例 1:

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

注意:

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

给定的数组是无序的。

C

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* findErrorNums(int* nums, int numsSize, int* returnSize) 
{
    int n=numsSize;
    sort(nums,0,n-1);
    int r1;
    for(int i=1;i<n;i++)
    {
        if(nums[i]==nums[i-1])
        {
            r1=nums[i];
            break;
        }
    }
    int s1=0;
    for(int i=0;i<n;i++)
    {
        s1+=nums[i];
    }
    int s0=s1-r1;
    int s2=0;
    for(int i=1;i<=n;i++)
    {
        s2+=i;
    }
    int* res=(int*)malloc(sizeof(int)*2);
    res[0]=r1;
    res[1]=s2-s0;
    *returnSize=2;
    return res;
}

void sort(int *a, int left, int right)
{
    if(left >= right)
    {
        return ;
    }
    int i = left;
    int j = right;
    int key = a[i]; 
    while(i < j)                            
    {
        while(i < j && key <= a[j])
        {
            j--;
        }       
        a[i] = a[j];
        while(i < j && key >= a[i])
        {
            i++;
        }         
        a[j] = a[i];
    }    
    a[i] = key;
    sort(a, left, i - 1);
    sort(a, i + 1, right);
}

C++

class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) 
    {
        int n=nums.size();
        set<int> tmp;
        int s0=0;
        int s1=0;
        int s2=0;
        for(int i=0;i<n;i++)
        {
            tmp.insert(nums[i]);
            s1+=nums[i];
            s2+=i+1;
        }
        set<int>::iterator it;
        for(it=tmp.begin();it!=tmp.end();it++)
        {
            s0+=*it;
        }
        return {s1-s0,s2-s0};
    }
};

python

class Solution:
    def findErrorNums(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        n=len(nums)
        s1=sum(nums)
        b=set(nums)
        s0=sum(b)
        s2=0
        for i in range(1,n+1):
            s2+=i
        return [s1-s0,s2-s0]

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/83929231
今日推荐