动画:面试必刷之找出数组中重复的数字
16lz
2021-01-22
题目
在一个长度为 n 的数组里的所有数字都在 0 - n-1 的范围内。数组中的某些数字是重复的,但不知道有几个数字重复,也不知道重复了几次,请找出数组中任意一个重复的数字。
问题分析
在数组中找出重复数字,第一想到的是暴力破解,首先对数组元素进行排序,然后进行遍历,就可以找出重复的数字。
但是上述性能效率不高,再来想另一种方法,一想到重复,我们最先想到的是散列表是否可以帮助解决数据重复问题。每遍历一个数据,我们就拿到散列表中对比,如果没有,就加入到散列表中,如果有,该数字为重复数字。
第三个方法比较难以想到,题目中说到的是所有数字在 0 - n-1 范围内,所以遍历数组,数组中的每个元素都要和下标对比是否相等,如果是,继续扫描,否则就要和该元素为下标值查找到相同的元素进行比较,如果相同,则为重复数字,否则两个数据进行交换。
动画实现
解题思路
思路一:先进行数据的排序,然后就可以找到重复的数字(但是时间复杂度非常的高)
思路二:散列表(哈希表),一说到查找,首先想到效率最高的就是哈希表。遍历所有的数据,在散列表中查找,如果存在数据,则为重复数字,否则将该数据插入到该哈希表中。(空间复杂度为 O(n))
思路三:题目中说到的是所有数字在 0 - n-1 范围内,所以遍历数组,数组中的每个元素都要和下标对比是否相等,如果是,继续扫描,否则就要和该元素为下标值查找到相同的元素进行比较,如果相同,则为重复数字,否则两个数据进行交换。
代码实现
javaScript
Java
Python
测试用例
多个重复元素的数组 —— 普通测试
一个重复元素的数组、没有重复元素的数组 —— 特殊测试
- 空数组 —— 输入测试
更多相关文章
- 动画:面试必刷之二维数组中查找一个元素
- 基于业务和平台理解数字营销概念
- C语言的一些练习以及自己写一个猜数字小游戏
- 一道简单的数组题目:删除排序数组中的重复项
- 剑指 offer 第一题: 二维数组中的查找
- 图解LeetCode第 26 号问题:删除排序数组中的重复项
- C语言的一些练习以及写一个猜数字游戏
- js中基础数据结构数组去重问题
- 动画 :相识数组与链表两兄弟