刷題-Leetcode-217. 存在重複元素
阿新 • • 發佈:2021-09-17
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 }