集合 s 包含从 1 到 n 的整数,但集合丢失了一个数字并且有一个数字重复 。
数组 nums 代表了集合 S 发生错误后的结果。
请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入:nums = [1,2,2,4]
输出:[2,3]
示例 2:
输入:nums = [1,1]
输出:[1,2]
提示:
2 <= nums.length <= 104
1 <= nums[i] <= 104
class Solution {
public int[] findErrorNums(int[] nums) {
int temp = 0;
int[] returnArr = new int[2];
for(int i = 0; i < nums.length; i++) {
//取出元素的绝对值
temp = nums[i];
if(nums[i] < 0)
temp = -nums[i];
//以绝对值减 1为下标检查元素
if(nums[temp-1] < 0)
//元素为负表示某个数字重复,即绝对值
returnArr[0] = temp;
else
//元素为正则将其置为负
nums[temp-1] *= -1;
}
//遍历修改后的数组,正数元素的下标加上 1为缺失的数字
for(int i = 0; i < nums.length; i++)
if(nums[i] > 0) {
returnArr[1] = i + 1;
break;
}
return returnArr;
}
}