【剑指offer】面试题3:数组中重复的数字(JAVA)

这篇博客详细解析了如何使用Java解决《剑指Offer》面试题3,即找出数组中重复出现的数字。通过算法分析和代码实现,帮助读者理解如何在已知数组中检测并找出重复元素。
摘要由CSDN通过智能技术生成
/**
在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,
也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},
那么对应的输出是重复的数字2或者3。
*/
/*思路:
 * 1.将数组排序,排序后看邻近
 * 2.哈希,将下标与数值对应,在排表的过程中发现重复元素即返回
 */

/**
 * 拓展:不修改数组的查找
 * 在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。
 * 请找出数组中任意一个重复的数字,但不能修改输入的数组。
 * 例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。
 */
/*思路:
* 1.创建长度为n+1的辅助数组,将原数组元素复制,如m复制到下标为m的位置-->辅助空间为O(n)
* 2.类似二分查找。将1~n分为1~m和m+1~n,如果1~m的数字数目超过m必有重复
* */

package sword;

/**
 * @author PangWanjia
 * @date 2021/3/16 19:17
 */
public class test03 {
    //哈希,将数字放进对应的下标下,即数组下标=数组元素,找到重复的时直接结束
    static int findnum(int[] nums){
        for(int i = 0;i<nums.length;i++){
            while(nums[i]!=i){
                if(nums[nums[i]]==nums[i]){
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值