【脚趾offer-03】数组中的重复数字

简介: 【脚趾offer-03】数组中的重复数字

一、题目描述

找出数组中重复的数字。

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

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

示例 1:

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

二、思路分析:

这个问题有多种思路: 核心关键在于寻找到有相同的数值,找到一个就可以返回

2.1 使用数组记录

时间复杂度O(n)  空间复杂度O(N)

var findRepeatNumber = function(nums) {
    const map = [] // 记录是否使用
    for(const num of nums){
        if(map[num]){
            return num
        }
        map[num] = true
    }
};

2.2 排序

通过给nums排序的方式,然后判断某个元素是否等于前一个元素,找到就可以返回了。 时间复杂度: O(NlogN)  这里sort排序底层就是快排或者归并排序了

var findRepeatNumber = function(nums) {
    nums.sort((a,b)=>a-b)
    for(let i=0;i<nums.length;i++){
        if(i!=0&&nums[i]==nums[i-1])return nums[i]
    }
};

2.3 哈希表+原地交换(最优解)

var findRepeatNumber = function(nums) {
    const obj = {}
    let cur
    for(let i=0;i<nums.length;i++){
        cur = nums[i]
        if(obj[cur]){
            return cur
        }else{
            obj[cur] = true
        }
    }
};

三种解决办法提交截图

image.png

四、总结:

  • 第三种解法使用对象会比使用map更加快(毕竟map的实现思路就是通过key-value的形式) 本文剑指offer第一篇就到这里啦,欢迎👍


相关文章
|
存储 算法 数据可视化
python老司机必备-内存泄露分析优化
python老司机必备-内存泄露分析优化
1795 0
python老司机必备-内存泄露分析优化
|
算法 Java 数据安全/隐私保护
Java:Hutool工具箱之Hutool-crypto加密解密
Java:Hutool工具箱之Hutool-crypto加密解密
3910 0
Java:Hutool工具箱之Hutool-crypto加密解密
|
安全 Go API
go语言中的Atomic操作与sema锁
在并发编程中,确保数据一致性和程序正确性是关键挑战。Go语言通过协程和通道提供强大支持,但在需精细控制资源访问时,Atomic操作和sema锁变得至关重要。Atomic操作确保多协程环境下对共享资源的访问是不可分割的,如`sync/atomic`包中的`AddInt32`等函数,底层利用硬件锁机制实现。sema锁(信号量锁)控制并发协程数量,其核心是一个uint32值,当大于零时通过CAS操作实现锁的获取与释放;当为零时,sema锁管理协程休眠队列。这两种机制共同保障了Go语言并发环境下的数据完整性和程序稳定性。
232 1
|
程序员 数据库 uml
领域驱动设计-让程序员心中有码(九)
领域驱动设计-让程序员心中有码(九)
|
机器学习/深度学习 编解码 固态存储
YOLOv8改进之更换BiFPN并融合P2小目标检测层
BiFPN(Bi-directional Feature Pyramid Network)是一种用于目标检测和语义分割任务的神经网络架构,旨在改善特征金字塔网络(Feature Pyramid Network, FPN)的性能。FPN是一种用于处理多尺度信息的网络结构,通常与骨干网络(如ResNet或EfficientNet)结合使用,以生成不同分辨率的特征金字塔,从而提高对象检测和分割的性能。BiFPN在此基础上进行了改进,以更好地捕获多尺度信息和提高模型性能。
5918 0
|
XML 设计模式 Java
【面试必问】Spring核心之控制反转(IOC)
Spring Bean是Spring框架中的一个核心概念,它是一个由Spring容器管理的对象。在Spring中,Bean是指任何一个由Spring容器所管理的对象,可以是Java类的实例、数据源、事务管理器等等
295 1
【面试必问】Spring核心之控制反转(IOC)
|
人工智能 算法 Python
用 Python 跟自己下棋(续)
棋类游戏最基本的 AI 方法就是给棋盘上每个位置的优劣程度打分,然后选择的最高分的位置来走。打分算法的好坏,就决定了这个 AI 的“智能”程度。
|
开发者
Servlet 之接口的介绍以及实现 Servlet 接口 | 学习笔记
快速学习 Servlet 之接口的介绍以及实现 Servlet 接口。
187 0
Servlet 之接口的介绍以及实现 Servlet 接口 | 学习笔记
LeetCode 23合并K个升序链表&24两两交换链表中的节点
给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。
171 0
LeetCode 23合并K个升序链表&24两两交换链表中的节点