剑指 Offer之数组与矩阵:03. 数组中重复的数字-简单易入手,建议码友们点赞+收藏喔~

一、题目描述

请找出数组中任意一个重复的数字

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

示例 1:

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

二、题目解析

注意题目描述:

一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的 范围内,这个 范围 恰好与数组的下标可以一一对应。
所以我们可以执行某种操作,使索引与值一一对应,即索引 0 的值为 0,索引 1 的值为 1。而一旦某个索引的值不只一个,则找到了重复的数字,也即发生了 哈希冲突。

三、参考代码

package LiKouTi;

import java.util.HashSet;
import java.util.Set;

/**
 * arrays:传入的数组
 * nums:存放数组元素的集合
 * num:数组中的元素
 */
public class Repeat {
    public static void main(String[] args) {
        int[] arrays = new int[]{2,3,4,5,3,6};
        System.out.println(findRepeatNumbers(arrays));
    }
    public static int findRepeatNumbers(int[] arrays){
        //创建hashset集合,不会存储重复的元素
        Set<Integer> nums = new HashSet<>();
        for (int num : arrays) {
            if(nums.contains(num)){
                return num;
            }else{
                nums.add(num);
            }
        }
        return -1;
    }

}

运行结果:

运行结果
思考:如果想输出所有重复的数字应该如何?

作者:Aimee.洁
本文版权归作者和CSDN共有,欢迎转载,未经作者同意必须保留此版声明,否则保留追究法律责任的权利。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值