力扣645(java)-错误的集合(简单)
题目:
集合 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-mismatch
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
1.先将整个数组的数进行排序,定义一个长度为2的新数组存放重复数和缺失数
2.然后考虑错误的情况如:
第一种错误出现在数组中间:[1,2,3,3,5,6](两个数一样找到了新数组的重复数,两个数差距为2,则缺失数为重复数+1)
第二种错误出现在数组首部:[2,2,3,4,5,6](有重复数也没有两个数差距为2的数,但首元素不为1,则缺失数就为1)
第三种错误出现在数组尾部:[1,2,3,4,5,5] (有重复数也没有两个数差距为2的数,但末元素不为n, 则缺失数就为1)
3.遍历整个数组,找出错误,输出结果
代码:
小知识:
Arrays.sort(int[] a):是对一个数组的所有元素进行排序,并且是按从小到大的顺序。