当前位置: 代码迷 >> 综合 >> 领扣LintCode算法问题答案-1112. 寻找数据错误
  详细解决方案

领扣LintCode算法问题答案-1112. 寻找数据错误

热度:89   发布时间:2024-02-23 19:21:14.0

领扣LintCode算法问题答案-1112. 寻找数据错误

目录

  • 1112. 寻找数据错误
    • 描述
    • 样例 1:
    • 样例 2:
  • 题解
  • 鸣谢

1112. 寻找数据错误

描述

集合S中原本包含数字1到n。但不幸的是,由于数据错误集合中的一个数变成了集合中的另一个数,这导致集合中有两个重复的数,并且集合中缺失了1到n的某个数。

给定数组nums,表示发生错误后的数组,以数组的形式返回重复的数值和缺失的数值。

  1. 数组的大小范围为[2, 10000]。
  2. 数组元素是无序的。

样例 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;}
}

原题链接点这里

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。