一起探索算法的世界:判断存在重复(举一反“四”)

欢迎来到算法的世界,现在我们在第一层:初级算法。

开始我们的旅途吧!

一起探索算法的世界:判断存在重复(举一反“四”)

题目

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例

<code>输入: [1,2,3,4]
输出: false/<code>
<code>输入: [1,1,1,3,3,4,3,2,4,2]
输出: true/<code>

题解

1、使用暴力解决问题:

什么样子的解法我们可以称之为暴力呢,针对这道题目,可谓之暴力的解法,便是对每个元素都进行一次数组的遍历,每个元素都找一下是否存在遍历,当不存在时,便继续进行下个元素的数组遍历。

一起探索算法的世界:判断存在重复(举一反“四”)

不推荐暴力解决问题

该方式可以解决问题,但最坏的情况是,对每个元素都要进行遍历,然后结果还是“不重复”...

也就是时间复杂度将达到O(n^2),好处是没有实现额外空间。


2、使用排序来进行:

暴力法解决问题在效率上感觉很一般,那么这里我们可以取个巧,先对数组进行排序,为什么呢?

因为经过排序后的数组, 若有重复的元素,两者肯定是相邻元素,那么我们就只需要在一次循环中,比较相邻的两个元素,就能知道是否存在重复元素了。

一起探索算法的世界:判断存在重复(举一反“四”)

排序解法

这里我们直接使用了工具类来帮我们排序,整个过程的复杂度也实际上都得看排序算法的情况。


3、使用Map进行判断:

判断是否存在重复元素,其实也是一种在数组中循环符合某个条件的元素,面对这类题目,我们可以考虑通过一个map来实现,具体步骤便是:

在循环遍历中,对每个元素,我们都去map中寻找与该元素一起符合条件的元素,若查找不到,说明暂时符合条件(如这里的条件是重复,也就是说还没有找到与该元素重复的值),就将该元素放入map中,等待其他元素来进行条件比较。

一起探索算法的世界:判断存在重复(举一反“四”)

HashMap方法


4、使用Set进行哈希存储判断:

针对重复元素,我们还可以使用一些数据结构的特性,比如哈希表(HashSet和HashMap),其中Set有一个特性,就是不会存储重复的元素,那么我们可以依赖这个特性来解决我们的问题

一起探索算法的世界:判断存在重复(举一反“四”)

HashSet方法


面对简单的题目,举一反三,考虑多几种方案,面试时很好吹(?不对,是很好展示自己)


分享到:


相關文章: