题目描述:
Leetcode
解题思路:
方法一:时间复杂度O(NlogN)
该数组存储的是[1,n]的所有整数!!!
1,先对数组进行排序
2,找出重复数字
3,找到缺少的数,
(1)当丢失的数字不为1或者n时,判断相邻两个位置的差
(2)当丢失的数字为1或者n时,特殊处理
方法二:
交换数组元素,时间O(N),O(1)
还没看懂…
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
vector<int> error(2);
int pre=0,n;
n = nums.size();
sort(nums.begin(),nums.end());
for (int i = 0; i < n; i++)
{
if(nums[i]==pre)
{
error[0] = nums[i];
}
if(nums[i]-pre>1)
error[1] = pre + 1;
pre = nums[i];
}
if(nums[n-1]!=n)
error[1] = n;
return error;
}
};
int main(){
vector<int> nums;
int x;
while(1)
{
cin >> x;
nums.push_back(x);
if(cin.get()=='\n')
break;
}
Solution sl;
vector<int> error = sl.findErrorNums(nums);
for (int i = 0; i <2;i++)
cout << error[i] << " ";
}