Leetcode - 645 Set Mismatch (Easy)
题目描述:正确数组应该是从 1 到 n,现在其中一个元素丢失,并且在该元素的位置是另一个其他重复的元素,求重复的元素与丢失的元素。
Input: nums = [1,2,2,4]
Output: [2,3]
解题思路:将所有元素都交换到正确位置即可判断。
public int[] findErrorNums(int[] nums
) {
for (int i
= 0; i
< nums
.length
; i
++) {
while (nums
[i
] != i
+ 1 && nums
[nums
[i
] - 1] != nums
[i
]) {
swap
(nums
, i
, nums
[i
] - 1);
}
}
for (int i
= 0; i
< nums
.length
; i
++) {
if (nums
[i
] != i
+ 1) {
return new int[]{nums
[i
], i
+ 1};
}
}
return null
;
}
public void swap(int[] nums
, int i
, int j
) {
int t
= nums
[i
];
nums
[i
] = nums
[j
];
nums
[j
] = t
;
}