力扣 645. 错误的集合
作者:互联网
题目来源:https://leetcode-cn.com/problems/set-mismatch/
大致题意:给定一个长度为n的数组,里面是1~n的所有数字,不过重复了一个数字且丢失了一个数字。找出这两个数。
思路:
排序+遍历
先排序,然后遍历查找。如果:
- 当前数字与上一次的数字相等,则为重复数字
- 当前数字减去上一次的数字大于1,则它俩的中位数即为丢失数字
记录+遍历
先遍历,使用一个数组记录所有数字出现次数,然后遍历次数数组
- 次数为2,则为重复数字
- 次数为0,则为丢失数字
代码:
public int[] findErrorNums(int[] nums) {
int[] ans = new int[2];
int[] freq = new int[nums.length+1]; // 次数数组
for (int i : nums) { // 记录次数
freq[i]++;
}
for (int i = 1; i <= nums.length; i++) { // 遍历
if (freq[i] == 2) {
ans[0] = i;
}
if (freq[i] == 0) {
ans[1] = i;
}
}
return ans;
}
数学
- 原数组的和 - 原数组内容创建的集合 = 重复数字
- 1~n的和 - 原数组内容创建的集合 = 丢失数字
标签:遍历,数字,int,力扣,645,数组,ans,集合,freq 来源: https://blog.csdn.net/csdn_muxin/article/details/118467644