刷题-Leetcode-217. 存在重复元素

217. 存在重复元素

题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/contains-duplicate/

题目描述

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

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

 

示例 1:  

输入: [1,2,3,1]
输出: true

示例 2:

输入: [1,2,3,4]
输出: false

示例 3:

输入: [1,1,1,3,3,4,3,2,4,2]
输出: true 

题目分析


更推荐第二种方法,一般情况下空间足够,主要是要降低时间复杂度。

 1 class Solution {
 2     public boolean containsDuplicate(int[] nums) {
 3         //检测重复
 4         //set 元素唯一
 5         //dictionary(java:HashMap) 每个元素出现次数
 6 
 7         //1.排序法
 8         // if(nums.length==0||nums==null){
 9         //     return false;
10         // }
11         // Arrays.sort(nums);//排序最优时间O(nlogn) 空间o(1)
12         // int prev = nums[0];
13         // for(int i=1;i<nums.length;i++){
14         //     if(prev==nums[i]){
15         //         return true;
16         //     }else{
17         //         prev = nums[i];
18         //     }
19         // }
20         // return false;
21 
22         //2.set法 比较数组和set大小,相等为false  时间o(n) 空间o(n)
23         // if(nums.length==0||nums==null){
24         //     return false;
25         // }
26         // HashSet<Integer> set = new HashSet<>();
27         // for(int num:nums){
28         //     set.add(num);
29         // }
30         // return set.size()==nums.length?false:true;
31 
32 
33 
34         // //3.字典法(HashMap) 计算元素出现的次数 遍历value有>=1为true 空间o(n)
35         if(nums.length==0||nums==null){
36             return false;
37         }       
38         HashMap<Integer,Integer> map = new HashMap<>();
39         for(int num:nums){
40             if(!map.containsKey(num)){
41                 map.put(num,1);
42             }else{
43                 map.put(num,map.get(num)+1);
44             }   
45         }
46         for(int k:map.keySet()){
47             if(map.get(k)>1){
48                 return true;
49             }
50         }
51         return false;
52     }
53 }

 

 

posted @ 2021-09-17 12:53  Dul  阅读(26)  评论(0编辑  收藏  举报