序
本文次要记录一下 leetcode 之谬误的汇合
题目
汇合 S 蕴含从 1 到 n 的整数。可怜的是,因为数据谬误,导致汇合外面某一个元素复制了成了汇合外面的另外一个元素的值,导致汇合失落了一个整数并且有一个元素反复。给定一个数组 nums 代表了汇合 S 产生谬误后的后果。你的工作是首先寻找到反复呈现的整数,再找到失落的整数,将它们以数组的模式返回。示例 1:
输出: nums = [1,2,2,4]
输入: [2,3]
留神:
给定数组的长度范畴是 [2, 10000]。给定的数组是无序的。起源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/set-mismatch
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
题解
class Solution {public int[] findErrorNums(int[] nums) {
int n = nums.length;
int[] count = new int[n+1];
int[] result = new int[2];
int sum = 0;
for (int i : nums) {count[i]++;
if (count[i] == 2) {result[0] = i;
}
sum = sum + i;
}
int rightSum = n * (n + 1) / 2;
result[1] = rightSum - sum + result[0];
return result;
}
}
小结
这里遍历一次数组,求出总和,并计算每个元素的 count,同时找出反复的元素,之后依据自然数求和公式与现有总和的差值及反复的元素计算得出缺失的元素。
doc
- 谬误的汇合