【剑指 Offer】数组中重复的数字————刷题日记day2

该博客探讨了三种解决数组中重复数字问题的方法:暴力匹配、排序后查找相邻重复项和使用哈希表。每种方法都有其优缺点,如暴力匹配效率低下,排序会改变原有顺序,而哈希表则能高效找到重复项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 剑指 Offer 03. 数组中重复的数字

    难度简单887

    找出数组中重复的数字。

    在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

    示例 1:

    输入:
    [2, 3, 1, 0, 2, 5, 3]
    输出:2 或 3 
    

    限制:

    2 <= n <= 100000
    
思路

第一个想法,暴力,直接拿第一个数字和后面每个数字匹对,发现重复直接返回

第二个想法,先排序,重复的数字肯定在旁边

第三想法 ,hash .因为数组有范围,不会越界。如果数组里面有重复 ,新数组对应下标的值肯定等于2了,直接返回

题目算法代码如下

public class 数组中重复的数字 {
    public static void main(String[] args) {
        int [] nums=new int[]{2, 3, 1, 0, 2, 5, 3};
        int repeatNumber = findRepeatNumber1(nums);
        System.out.println(repeatNumber);
    }
    public static int findRepeatNumber(int[] nums) {
        //第一想法 ,但是这样很耗时间
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j <nums.length ; j++) {
              if (nums[i]==nums[j]){
                  return nums[i];
              }
            }
        }
        return -1;
    }
    public static int findRepeatNumber1(int[] nums) {
        //第二想法 ,排序后,重复的数字肯定在旁边
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            if (nums[i]==nums[i+1]){
                return nums[i];
            }
        }
        return -1;
    }

    public static int findRepeatNumber2(int[] nums) {
        //第三想法 ,hash .因为数组有范围,不会越界
        int [] arr=new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            arr[nums[i]]++;
            if (arr[nums[i]]>1){
                return nums[i];
            }
        }
        return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值