题目

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

问题分析

在数组中找出重复数字,第一想到的是暴力破解,首先对数组元素进行排序,然后进行遍历,就可以找出重复的数字。

但是上述性能效率不高,再来想另一种方法,一想到重复,我们最先想到的是散列表是否可以帮助解决数据重复问题。每遍历一个数据,我们就拿到散列表中对比,如果没有,就加入到散列表中,如果有,该数字为重复数字。

第三个方法比较难以想到,题目中说到的是所有数字在 0 - n-1 范围内,所以遍历数组,数组中的每个元素都要和下标对比是否相等,如果是,继续扫描,否则就要和该元素为下标值查找到相同的元素进行比较,如果相同,则为重复数字,否则两个数据进行交换。

动画实现

解题思路

思路一:先进行数据的排序,然后就可以找到重复的数字(但是时间复杂度非常的高)

思路二:散列表(哈希表),一说到查找,首先想到效率最高的就是哈希表。遍历所有的数据,在散列表中查找,如果存在数据,则为重复数字,否则将该数据插入到该哈希表中。(空间复杂度为 O(n))

思路三:题目中说到的是所有数字在 0 - n-1 范围内,所以遍历数组,数组中的每个元素都要和下标对比是否相等,如果是,继续扫描,否则就要和该元素为下标值查找到相同的元素进行比较,如果相同,则为重复数字,否则两个数据进行交换。

代码实现

javaScript

Java


Python

测试用例

  • 多个重复元素的数组 —— 普通测试

  • 一个重复元素的数组、没有重复元素的数组 —— 特殊测试

  • 空数组 —— 输入测试
©著作权归作者所有:来自51CTO博客作者mb5fe1601ede528的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 动画:面试必刷之二维数组中查找一个元素
  2. 基于业务和平台理解数字营销概念
  3. C语言的一些练习以及自己写一个猜数字小游戏
  4. 一道简单的数组题目:删除排序数组中的重复项
  5. 剑指 offer 第一题: 二维数组中的查找
  6. 图解LeetCode第 26 号问题:删除排序数组中的重复项
  7. C语言的一些练习以及写一个猜数字游戏
  8. js中基础数据结构数组去重问题
  9. 动画 :相识数组与链表两兄弟

随机推荐

  1. SQL:如何从另一个表中删除行会议条件
  2. java往SQL Server中插入数据插不进去
  3. delphi+sql server 数据库死锁问题。高分
  4. PHP OOP - 调用非obj上的成员函数[重复]
  5. 我学了delphi也有几个月了,我是否能参加团
  6. Postgresql数据库安装问题,找不到configur
  7. mysql 导出数据到txt文件
  8. Oracle ------ SQLDeveloper中SQL语句格
  9. 【MySQL】配置MySQL安装和远程访问步骤
  10. TSQL - 非标准化表上的最大值或最高日期