JZ3 数组中重复的数字 Java

核心思想(图文结合读):由于元素值在 [0,n-1] 区间内,最理想的状态是不是 0 在0号位置,1在1号位置?

那么我们可以遍历该数组,每一次判断第 i 个元素值 m 是否等于 i 本身(即上述逻辑)

如果相等说明该元素已经在理想的状态,continue

如果不相等,继续判断第 i 个元素值 m 是否等于该数组中 第 m 个位置的元素?

如果相等说明重复,返回元素

如果不相等则交换第 i 个元素和第m个元素的位置。

Java代码以下:

public int duplicate(int[] numbers){
    // 遍历数组
    for(int i=0;i<numbers.length;i++){
        if(numbers[i] == i) // 第i个位置的元素就是i
            continue;
        else {
          // 重点说明m: 第i个元素值就是 m  ,  numbers[numbers[i]] 相当于 numbers[m]
            if(numbers[i] == numbers[numbers[i]]) // 第i个元素与第m个位置元素相等,重复
                return numbers[i];
            else {
                // 交换
                    int t=0;
                    t = numbers[numbers[i]];
                    numbers[numbers[i]] = numbers[i];
                    numbers[i] = t;
}
}
}
// 来到这说明没有重复的
return -1;
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值