LeetCode(找到所有数组中消失的数字)

该代码片段介绍了一个算法,通过两次遍历整数数组,利用取模操作找到未出现的数字。第一个遍历更新数组元素,第二个遍历确定缺失的数字并返回结果[5,6]。
摘要由CSDN通过智能技术生成

时间复杂度O(n),空间复杂度O(1)
   public List<Integer> findDisappearedNumbers(int[]nums){
        int n = nums.length;
        for(int num : nums){
            int x= (num-1)%n;  //对n取模来还原出它本来的值
            nums[x]+=n;
        }
        List<Integer> result = new ArrayList<Integer>();
        for(int i=0;i<n;i++){
            if(nums[i]<=n){
                result.add(i+1);
            }
        }
        return result;
    }
    

解析

原数组[4,3,2,7,8,2,3,1]

第一个for循环如下:

1.x=(4-1)%8=3;  nums[3]=7+8=15;     

2.x=(3-1)%8=2;  nums[2]=2+8=10;    

3.x=(2-1)%8=1;   nums[1]=3+8=11;        

4.x=(7-1)%8=6;   nums[6]=3+8=11;       

5.x=(8-1)%8=7;  nums[7]=1+8=9;         

6.x=(2-1)%8=1; nums[1]=3+8=11;       

7.x=(3-1)%8=2;  nums[2]=2+8=10;          

8..x=(1-1)%8=0;  nums[0]=4+8=12;        

第一个for循环遍历完之后发现

出现的下标为[3,2,1,6,7,1,2,0]

元素不消失得到的下标应该为[0,1,2,3,4,5,6,7]

所以缺了[4,5]  

然后将下标加1,得到[5,6] ,就跟示例一结果一样

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值