找出整数数组中任意重复的数字

整数数组arr大小为n,取值范围0~n-1,可能包含多个重复的数字,如果数组存在重复的数字,请找出数组arr中任意重复的数字。

思路1:使用哈希表,遍历arr,依次将arr[i]存入哈希表,如果哈希表中已经存在arr[i],则表明arr[i]重复了。用这个方法,可以找出所有重复的数字,但是需要额外O(n)的空间,是以空间换时间。

思路2:直接修改arr数组,遍历arr,如果arr[i] != i,那么就进入一个循环,

如果arr[i] == arr[arr[i]],则说明arr[i]出现了2次,是重复数字,可以返回了;

否则,就交换这两个数字,交换以后数字i就满足了arr[i] == i。

使用这个方法可以判断数组是否有重复数字,并且可以打印出一个重复数字,但是无法打印出所有的重复数字。

public class FindAnyDuplicateNumber {

    public int getDuplicate(int[] numbers) {

        if(numbers == null || numbers.length < 0){
            return -1;
        }

        for(int i = 0; i < numbers.length - 1; i++){
            while (numbers[i] != i){
                if(numbers[i] == numbers[numbers[i]]) {
                    return numbers[i];
                }

                //swap numbers[i] numbers[numberp[i]]
                int temp = numbers[i];
                numbers[i] = numbers[temp];
                numbers[temp] = temp;
            }
        }
        return -1;
    }

    public static void main(String[] args){
        //只能找到一个重复的数字,如果要找到所有重复的数字,就要使用辅助数组
        int[] nums = {1, 4, 2, 5, 2, 0, 6, 3};
        System.out.println(new FindAnyDuplicateNumber().getDuplicate(nums));

        int[] nums2 = null;
        System.out.println(new FindAnyDuplicateNumber().getDuplicate(nums2));

        int[] nums3 = {1, 4, 2, 5, 7, 0, 6, 3};
        System.out.println(new FindAnyDuplicateNumber().getDuplicate(nums3));
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值