| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法——寻找重复的数 -> 正文阅读 |
|
[数据结构与算法]算法——寻找重复的数 |
案例分析: 给定一个包含?n + 1 个整数的数组?nums,其数字都在 1 到 n?之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明:
方法一:利用hashmap的方法,进行遍历数组,统计数字出现的次数 使用hashMap的方法:遍历整个数组,统计每个数字出现的次数
方法二:可以利用set进行保存,我们知道set集合是无序的且数据是不能够重复。
无论是方法一还是方法二,时间复杂度都是O(n),对数组进行了一次的遍历,查找的时间复杂度为O(1)。空间复杂度为O(n)。需要一个外部的存储HashMap或者是HashSet进行做额外的存储,不太满足题目当中的要求。需要进行改进的。 方法三:使用二分查找的方式: ? ? ? ?现在增加到了N+1个数,根据抽屉原理,肯定会有重复数。对于增加重复数的方式,整体应该有两种可能:
因为数字是在1到N之间的,
方法五:使用快慢指针 整体思路如下:
第二次相遇时,应该有: 慢指针总路程 = 环外0到入口 + 环内入口到相遇点 (可能还有 + 环内m圈) 快指针总路程 = 环外0到入口 + 环内入口到相遇点 + 环内n圈 并且,快指针总路程是慢指针的2倍。所以: 环内n-m圈 = 环外0到入口 + 环内入口到相遇点。 把环内项移到同一边,就有: 环内相遇点到入口 + 环内n-m-1圈 = 环外0到入口
????????空间复杂度:O(1),我们只需要定义几个指针就可以了。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 11:28:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |