题目描述:

给你一个整数数组nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例:

image.png

解题思路:

1.HashMap

2.排序

3.HashSet

解(1):

public boolean containsDuplicate(int[] nums) {

HashMap hm= new HashMap<>();//创建哈希表

boolean flag=false;//默认数组中每个元素互不相同

for(int i=0;i<nums.length;++i){//遍历数组,得到数组中的每一个值

int key=nums[i]; //将拿得到的每一个值作为键

Integer values=hm.get(key);//拿得到的每一个值作为键到HashMap集合中去找对应的值,看其返回值(注意:values的类型一定要是Integer,不能是int,否则会报int类型不能为null的错误)

//如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为存储值

if(values==null){

hm.put(key,1);

//如果返回值不是null:说明该字符在HashMap集合中存在,返回true

}else{

flag=true;

}

}

return flag;

}

解(3):

public boolean containsDuplicate(int[] nums) {

HashSet set = new HashSet<>();//创建HashSet

for(int num:nums){//增强for循环

set.add(num);//将数组元素依次添加到集合中

}

//因为set集合是不允许重复的,所以两者长度相等,则说明无重复元素,反之,有重复元素

return set.size()==nums.length?false:true;

}