Leetcode 645 FindErrorNum
645. 错误的集合
第一种方法,用数组模拟哈希表,获取出现次数
public int[] findErrorNums(int[] nums) {
        int n = nums.length;
        int[] res = new int[2];//导致集合丢失了一个数字 并且有一个数字重复。
        int[] tmp = new int[n + 1];
        for (int num : nums){
            //统计次数
            tmp[num]++;
        }
        for (int i = 1; i < tmp.length; i++) {
            if (tmp[i] == 1){
                //有效
                continue;
            }
            if (tmp[i] == 2){
                //duplicated
                res[0] = i;
            }else {
                //lost
                res[1] = i;
            }
        }
        return res;
    }
第二种方法 , 数学
//第一个元素:重复元素 = 当前数组和 - 去重后的数组和
//第二个元素:缺失元素 = 数学1~n求和 - 去重后的数组和
public int[] findErrorNums2(int[] nums){
    return new int[]{Arrays.stream(nums).sum() - Arrays.stream(nums).distinct().sum() ,
            (1 + nums.length) * nums.length / 2 - Arrays.stream(nums).distinct().sum()};
}
