1. 程式人生 > 其它 >力扣217-存在重複元素(多方法比較 Java版題解)

力扣217-存在重複元素(多方法比較 Java版題解)

技術標籤:演算法刷題演算法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; } }

  上述程式碼中規中矩,對於一個稍微有點計算機基礎的人來說沒有任何難度。

  • 程式碼執行結果
HashMap執行結果

  結果好像很慘說明還有其它更優的方法。趕緊再思考思考

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;
    }
}
  • 程式碼執行結果
HashSet執行結果

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;
    }
}
  • 程式碼執行結果
排序演算法執行結果

  此題結束,還是排序演算法結果可以些。