题目:
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:
输入:nums = [1,2,3,4]
输出:false
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
提示:
1 <= nums.length <= 105
-109 <= nums[i] <= 109
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/contains-duplicate
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
一、sort排序
先将数组中的所有数进行排序,这样相等的数字就会相邻,直接判断相邻的数字是否相等,相等返回true,不等返回false。
java代码:
1 class Solution { 2 public boolean containsDuplicate(int[] nums) { 3 Arrays.sort(nums); 4 int n = nums.length; 5 for(int i = 1; i < n; i++){ 6 if(nums[i] == nums[i-1]){ 7 return true; 8 } 9 } 10 return false; 11 } 12 }
python3代码:
1 class Solution: 2 def containsDuplicate(self, nums: List[int]) -> bool: 3 nums.sort() 4 for i in range(len(nums)-1): 5 if nums[i] == nums[i+1]: 6 return True 7 return False
二、HashSet
将数组中的元素插入到哈希表中,如果插入一个元素时,发现该元素已经存在于哈希表中,说明该元素重复,返回true。遍历结束,都没遇到重复元素,则返回false。
java代码:
1 class Solution { 2 public boolean containsDuplicate(int[] nums) { 3 HashSet<Integer> hashset = new HashSet<>(); 4 for(int num : nums){ 5 if(hashset.contains(num)){ 6 return true; 7 } 8 hashset.add(num); 9 } 10 return false; 11 } 12 }
python3代码:
1 class Solution: 2 def containsDuplicate(self, nums: List[int]) -> bool: 3 # 相等说明无重复元素,返回false(题中说了有重复返回true) 4 return not len(set(nums)) == len(nums)
小知识:
一、java中HashSet的使用
1 . HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
2 . HashSet 允许有 null 值。
3 . HashSet 是无序的,即不会记录插入的顺序。
4 . HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
5 . HashSet 实现了 Set 接口。
6 . HashSet 的初始化定义:
HashSet<String> sites = new HashSet<String>();
引用类型可以有:
7. 常用的方法:
- contains() 方法:来判断元素是否存在于集合当中;
- add() 方法:向集合中添加元素;
- remove() 方法:删除集合中的元素;
- clear方法:删除集合中所有元素;
- size()方法:计算HashSet中的元素数量;
- 使用for-each来迭代HashSet中的元素
二、python中集合的使用
1.set集合是python的一个基本数据类型,set中的元素是不重复的,无序的,里面的元素必须是可哈希的,不可变的(int,str,tuple,bool),相当于set就是dict类型的数据但是不保存value,只保存key。
创建集合:可以用{}或set()创建集合,但是创建空集合必须用set(),因为{}创建的是空字典。
2.常用方法:
- 增加数据:集合名.add(数据) # 因为集合自动去重复,如果添加是重复内容不会进行任何操作
-
追加数据序列:集合名.update(数据序列) #数据序列可以是元组、列表、字符串
-
删除:
集合名.remove(数据) #如果数据不存在,报错
集合名.discard(数据) # 数据不存在,不报错
集合名.pop() # 随机删除集合中某个数据,并返回这个数据
-
查找数据:(注意:set没有位置,不能利用索引来查找)
in : 判断数据是否在集合序列中 print( 数据 in 集合名 ) # 返回 True 或 False
not in: 判断集合不在集合序列中 print( 数据 not in 集合名 ) # 返回 True 或 False