1. 程式人生 > 其它 >刷題-Leetcode-217. 存在重複元素

刷題-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 }