Easy草稿★★★★★O(n) 時間 · O(n) 空間
ArrayHash TableSorting
Patterns#️⃣ 雜湊🔢 排序後處理
尚未複習過

解法已隱藏 — 先讀題目敘述、自己想想看,再點上方按鈕揭曉。

217Contains DuplicateArrays & HashingEasyArrays & Hashing

給定整數陣列 nums,如果陣列中有任何值出現至少兩次則回傳 true,若每個元素都不同則回傳 false

Example:

Input: nums = [1,2,3,1] Output: true

Intuition

TIP

核心思路:看到「是否有重複」就想到 HashSet——邊遍歷邊加入,遇到已存在的元素就代表有重複。

Approaches

1. Sorting — O(n log n) / O(1)
  • Idea: 排序後,重複元素必定相鄰,只需線性掃描檢查相鄰元素
  • Time: O(n log n) - 排序主導
  • Space: O(1) - 原地排序(或 O(n) 取決於排序實作)
class Solution {
    fun containsDuplicate(nums: IntArray): Boolean {
        nums.sort()
        for (i in 1 until nums.size) {
            if (nums[i] == nums[i - 1]) return true
        }
        return false
    }
}
⭐ 2. HashSet — O(n) / O(n)
  • Idea: 邊遍歷邊把元素加入 HashSet,若加入時已存在則代表有重複
  • Time: O(n) - 單次遍歷,HashSet 操作平均 O(1)
  • Space: O(n) - 最壞需儲存所有元素
class Solution {
    fun containsDuplicate(nums: IntArray): Boolean {
        val seen = HashSet<Int>()
        for (num in nums) {
            if (!seen.add(num)) return true
        }
        return false
    }
}

🔑 Takeaways