欢迎来到算法的世界,现在我们在第一层:初级算法。
开始我们的旅途吧!
题目
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例
输入: [1,2,3,4]
输出: false
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
题解
1、使用暴力解决问题:
什么样子的解法我们可以称之为暴力呢,针对这道题目,可谓之暴力的解法,便是对每个元素都进行一次数组的遍历,每个元素都找一下是否存在遍历,当不存在时,便继续进行下个元素的数组遍历。
该方式可以解决问题,但最坏的情况是,对每个元素都要进行遍历,然后结果还是“不重复”...
也就是时间复杂度将达到O(n^2),好处是没有实现额外空间。
2、使用排序来进行:
暴力法解决问题在效率上感觉很一般,那么这里我们可以取个巧,先对数组进行排序,为什么呢?
因为经过排序后的数组, 若有重复的元素,两者肯定是相邻元素,那么我们就只需要在一次循环中,比较相邻的两个元素,就能知道是否存在重复元素了。
这里我们直接使用了工具类来帮我们排序,整个过程的复杂度也实际上都得看排序算法的情况。
3、使用Map进行判断:
判断是否存在重复元素,其实也是一种在数组中循环符合某个条件的元素,面对这类题目,我们可以考虑通过一个map来实现,具体步骤便是:
在循环遍历中,对每个元素,我们都去map中寻找与该元素一起符合条件的元素,若查找不到,说明暂时符合条件(如这里的条件是重复,也就是说还没有找到与该元素重复的值),就将该元素放入map中,等待其他元素来进行条件比较。
4、使用Set进行哈希存储判断:
针对重复元素,我们还可以使用一些数据结构的特性,比如哈希表(HashSet和HashMap),其中Set有一个特性,就是不会存储重复的元素,那么我们可以依赖这个特性来解决我们的问题
面对简单的题目,举一反三,考虑多几种方案,面试时很好吹(?不对,是很好展示自己)