集合 S
包含从1到 n
的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。
给定一个数组 nums
代表了集合 S
发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入: nums = [1,2,2,4] 输出: [2,3]
注意:
- 给定数组的长度范围是 [2, 10000]。
- 给定的数组是无序的。
通过次数17,175提交次数40,441
class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
numDict={}
for i in nums:
numDict[i] = numDict.get(i,0)+1
output = []
for key in numDict.keys():
if numDict[key] ==2:
output.append(key)
break
d =len(nums)
if d*(d+1)/2<sum(nums):
output.append(key-abs(sum(nums)-d*(d+1)//2))
else:
output.append(key+abs(sum(nums)-d*(d+1)//2))
return output
c++
#include <iostream>
class Solution{
public:
vector<int> findErrorNums(vector<int>& nums){
vector<int> res;
unordered_set<int> s;
unordered_set<int> v;
for(int i=0; i<nums.size();i++){
if(!s.insert(nums[i]).second){
v.insert(nums[i]);
}
}
for(auto x:v) res.push_back(x);
for(int i=1;i<nums.size()+1;i++){
if(!s.count(i)){
res.push_back(i);
}
}
}
};
int main() {
std::cout << "Hello, World!" << std::endl;
vector<int> nums = [1,2,2,4];
s = Soloution();
std::cout<<s.findErrorNums(nums);
return 0;
}