集合
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]
版权声明:本文为qq_27060423原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。