力扣217-存在重複元素(多方法比較 Java版題解)
阿新 • • 發佈:2021-01-05
技術標籤:演算法刷題演算法leetcodejava雜湊表排序
力扣217-存在重複元素
一、原題題目
1.1 題目
給定一個整數陣列,判斷是否存在重複元素。如果任意一值在陣列中出現至少兩次,函式返回 true
。如果陣列中每個元素都不相同,則返回 false
。
1.2 示例
-
示例1:
輸入: [1,2,3,1]
輸出: true -
示例2:
輸入: [1,2,3,4]
輸出: false -
示例3:
輸入: [1,1,1,3,3,4,3,2,4,2]
輸出: true
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/contains-duplicate/
二、解題思路
2.1 HashMap思路解題
- 解題思路
此題很簡單,只需要把數組裡的每一個元素依次放入雜湊表中,以元素為 key
,個數為 value
。只要碰到該元素已經存在與雜湊表中,則可返回 true
,如果能遍歷完還沒返回結果則最後返回 false
。
- 詳細程式碼(Java)
public class Solution {
public boolean containsDuplicate(int[] nums) {
HashMap<Integer,Integer> map = new HashMap<>();
for (int i =0;i<nums.length;i++){
if (map.containsKey(nums[i])) return false;
else map.put(nums[i],1);
}
return true;
}
}
上述程式碼中規中矩,對於一個稍微有點計算機基礎的人來說沒有任何難度。
- 程式碼執行結果
結果好像很慘說明還有其它更優的方法。趕緊再思考思考
2.2 HashSet思路解題
看別人題解用的同樣的思路,但是用的是 HashSet 效能提升了不少
- 詳細程式碼(Java)
public class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
for (int x : nums) {
if (!set.add(x)) return true;
}
return false;
}
}
- 程式碼執行結果
2.3 排序思路解題
- 解題思路
在對數字從小到大排序之後,陣列的重複元素一定出現在相鄰位置中。因此,我們可以掃描已排序的陣列,每次判斷相鄰的兩個元素是否相等,如果相等則說明存在重複的元素。
- 詳細程式碼(Java)
public class Solution {
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
for (int i = 0;i<nums.length-1;i++){
if (nums[i] == nums[i+1]) return true;
}
return false;
}
}
- 程式碼執行結果
此題結束,還是排序演算法結果可以些。