数组元素在[1,n]之间的替换重复缺失问题

这是一篇关于在给定数组元素范围[1, n]内,如何找到重复和丢失元素的博客。介绍了LeetCode上的相关题目,如645、448和442,并提出了两种解决方案:使用HashSet进行查找,时间复杂度为O(N),空间复杂度为O(N);另一种是通过交换元素使其归位,同样时间复杂度为O(N),但空间复杂度降低到O(1)。" 80711022,1219280,Android Tween 动画教程,"['Android开发', '动画', 'Tween']
摘要由CSDN通过智能技术生成

题目描述:一个数组元素在 [1, n] 之间,其中一些数被替换为另一些数,导致重复和丢失,找出重复的数和丢失的数。

leetcode上可解题目:
645 一个元素被替换,寻找丢失和重复元素
448 寻找所有丢失的元素
442 寻找所有重复的元素

要求:时间复杂度小于O(N^2)
输入:nums = {4,2,1,2};
输出:重复的数:2
丢失的数:3

解题思路1:使用HashSet,判断重复元素和1-n中缺少的数,时间复杂度O(N),空间复杂度O(N)

public int[] findErrorNums(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        int[] ans = new int[2];
        for(int i = 0;i<nums.length;i++){
            if(!set.add(nums[i])){
                ans[0] = nums[i];
            }
        }
        for(int i = 1;i<=nums.length;i++){
            if(!set.contains(i)){
                ans[1] = i;
                break;
            }
        }
        return ans;
    }

解题思路2:通过使当前位与后面的数字交换使每个数在正确的位置上,时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值