领扣LintCode算法问题答案-1112. 寻找数据错误
目录
- 1112. 寻找数据错误
-
- 描述
- 样例 1:
- 样例 2:
- 题解
- 鸣谢
1112. 寻找数据错误
描述
集合S中原本包含数字1到n。但不幸的是,由于数据错误集合中的一个数变成了集合中的另一个数,这导致集合中有两个重复的数,并且集合中缺失了1到n的某个数。
给定数组nums,表示发生错误后的数组,以数组的形式返回重复的数值和缺失的数值。
- 数组的大小范围为[2, 10000]。
- 数组元素是无序的。
样例 1:
输入: nums = [1,2,2,4]
输出: [2,3]
解释:
2是重复的数,3是缺失的数。
样例 2:
输入: nums = [1,3,3,4]
输出: [3,2]
解释:
3是重复的数,2是缺失的数。
题解
public class Solution {
/*** @param nums: an array* @return: the number occurs twice and the number that is missing*/public int[] findErrorNums(int[] nums) {
// Write your code hereArrays.sort(nums);int[] ret = new int[2];int offset = 1;for (int i = 0; i < nums.length; i++) {
if (ret[1] == 0&& nums[i] != i + offset) {
ret[1] = i + offset;}if (ret[0] == 0&& nums[i] == nums[i + 1]) {
ret[0] = nums[i];if (ret[1] == 0) {
if (i + 2 < nums.length) {
if (nums[i + 2] != nums[i] + 1) {
ret[1] = i + 1 + offset;break;}} else {
ret[1] = i + 1 + offset;break;}}offset--;i++;}}if (ret[1] == 0) {
ret[1] = nums.length;}return ret;}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。