leetcode:21.找到所有数组中消失的数字 简单

这篇博客介绍了如何运用桶排序的思路解决在整数数组中找到所有消失的数字的问题。通过循环和交换操作,将数组调整为有序,并在过程中记录不符合条件的元素,最后将这些元素作为结果返回。这种方法在不允许使用额外空间的限制下实现,并讨论了如果允许使用额外空间,可以采用标记数组或位图的解决方案。
摘要由CSDN通过智能技术生成

还是应用了桶的思想,因为题中条件是不用额外的空间。把i放在nums[i - 1]的位置:首先判断nums[i]是否在它应该在的地方,即nums[i] - 1对应的位置,如果不在就交换,再把交换过来的元素放在它应该在的位置。然后重新遍历一次,发现不符合条件的元素就加入返回数组。
如果允许用额外空间的话也可以用标记数组,如果用位图的话需要考虑n的大小。

class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {   
 List<Integer> list=new ArrayList<>();
        for(int i=0;i<nums.length;i++){
            while(nums[i]!=nums[nums[i]-1]){
                int tmp=nums[i];
                nums[i]=nums[nums[i]-1];
                nums[tmp-1]=tmp;
            }
        }
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=i+1){
                list.add(i+1);
            }
        }
        return list;
    }
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值