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

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

题目

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


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


示例 1:


输入:

[2, 3, 1, 0, 2, 5, 3]

输出:2 或 3


限制:


2 <= n <= 100000


我的答案

class Solution {
    public int findRepeatNumber(int[] nums) {
        int x=-1;
        int [] p =new int[100000];
        for(int i=0;i<p.length-1;i++){
            p[i]=-1;
        }
        for(int i=0;i<=nums.length-1;i++){
            if(p[nums[i]]==-1){
                p[nums[i]]=0;
            }else{
                p[nums[i]]++;
            }
        }
        for(int i=0;i<p.length-1;i++){
           if(p[i]>0){
               x=i;
               break;
           }
        }
        //System.out.println(Arrays.toString(nums));
        return x;
    }
}

image.png 

优秀答案

Java 2ms 100% 补充一点,题目给了数组值的范围,所以不会越界!

class Solution {
    public int findRepeatNumber(int[] nums) {
        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;
    }
}

另一个我们可以用hash来做

class Solution {
    public int findRepeatNumber(int[] nums) {
        Set<Integer> set= new HashSet<Integer>();
        int res=-1;
        for(int i:nums)
        {
            if(!set.add(i)){
                res=i;
                break;
            }
        }
        return res;
    }
}

image.png  Set<Integer> set= new HashSet<Integer>();

这是一个泛型的写法,表示 这个集合中只能保存 integer 类型的对象,其他对象无法保存,

取出时 也是直接是这个integer 对象

Set 接口也是 Collection 接口的子接口,它有一个很重要也是很常用的实现类——HashSet,Set 是元素无序并且不包含重复元素的 collection(List 可以重复),被称为集。
HashSet 由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。

目录
相关文章
|
存储 数据采集 人工智能
如何设计一个监控平台(上篇)
在大型分布式微服务场景下,各个服务版本快速迭代,各类业务规模不断膨胀,同时监控的场景也在不断的发生变化,线上故障随时可能发生,各个平台错综复杂,如何保证线上服务稳定运行,同时提升运维效率,降低运维成本成了监控平台的挑战。
如何设计一个监控平台(上篇)
|
Windows
【Windows 逆向】OD 调试器工具 ( 推荐汉化版的 OD 调试工具 | 吾爱破解专用版Ollydbg | 备选工具 )
【Windows 逆向】OD 调试器工具 ( 推荐汉化版的 OD 调试工具 | 吾爱破解专用版Ollydbg | 备选工具 )
17522 0
【Windows 逆向】OD 调试器工具 ( 推荐汉化版的 OD 调试工具 | 吾爱破解专用版Ollydbg | 备选工具 )
|
存储 缓存 NoSQL
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
|
程序员
markdown语法图文介绍
markdown的排版格式固定且比较美观,大部分博主都会使用markdown进行博客文章的编辑,今天给大家介绍一下markdown语法的使用
20423 0
markdown语法图文介绍
|
关系型数据库 MySQL 网络安全
Navicat报错:2003 - Can‘t connect to MySQL server on ‘xxx‘ (10060 “Unknown error“)
Navicat报错:2003 - Can‘t connect to MySQL server on ‘xxx‘ (10060 “Unknown error“)
4077 0
Navicat报错:2003 - Can‘t connect to MySQL server on ‘xxx‘ (10060 “Unknown error“)
|
机器学习/深度学习 存储 人工智能
推荐系统序列化建模总结(一)
推荐系统序列化建模总结(一)
1671 0
推荐系统序列化建模总结(一)
|
机器学习/深度学习 存储 搜索推荐
【树模型与集成学习】(task6)梯度提升树GBDT+LR
协同过滤和矩阵分解存在的劣势就是仅利用了用户与物品相互行为信息进行推荐, 忽视了用户自身特征, 物品自身特征以及上下文信息等,导致生成的结果往往会比较片面。
1113 0
【树模型与集成学习】(task6)梯度提升树GBDT+LR
|
机器学习/深度学习 人工智能 算法
Python 机器学习实战(二):三个人也能联机下五子棋?怎么赢?
Python 机器学习实战(二):三个人也能联机下五子棋?怎么赢?
705 0
Python 机器学习实战(二):三个人也能联机下五子棋?怎么赢?
|
消息中间件 存储 负载均衡
RabbitMQ精讲1:主流MQ对比,为什么选择RabbitMQ
RabbitMQ精讲1:主流MQ对比,为什么选择RabbitMQ
RabbitMQ精讲1:主流MQ对比,为什么选择RabbitMQ
|
缓存 负载均衡 架构师
PyHubWeekly | 第四期:清理无效代码,给你的项目瘦瘦身吧!
当我们开发一个项目过程中,会不断的对某些部分进行增删、修改,这个过程中会产生很多无用的引用和代码。当这个工程代码量逐渐增多时,我们用人眼挨个去寻找无用代码自然是不现实的,本文就来介绍一款能够瞬间查找、修改项目中无效代码的工具,给你的项目瘦瘦身。
PyHubWeekly | 第四期:清理无效代码,给你的项目瘦瘦身吧!