題目 #
leetcode 217 - Contains Duplicate (題目說明請點連結)
題目簡述 #
判斷一個整數陣列中是否包含重複的元素。
範例 #
Example 1:
Input: nums = [1,2,3,1]
Output: true
Explanation: 陣列中有重複的元素 1。Example 2:
Input: nums = [1,2,3,4]
Output: false
Explanation: 陣列中沒有重複的元素。Example 3:
Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true
Explanation: 陣列中有多個重複的元素。解題思路 #
這題要求我們判斷一個整數陣列中是否包含重複的元素。我們可以使用 HashSet 來記錄已經出現過的數字,如果在遍歷過程中發現某個數字已經在 HashSet 中,則表示有重複。
解法 #
HashSet 查重法(HashSet Approach)
- 創建一個 HashSet 來存儲已經出現過的數字
- 遍歷陣列中的每個元素:
- 如果當前元素已經在 HashSet 中,返回
true - 否則將當前元素加入 HashSet
- 如果當前元素已經在 HashSet 中,返回
- 如果遍歷完畢都沒有發現重複,返回
false
步驟 #
- 初始化:
- 創建
HashSet<Integer> set
- 創建
- 遍歷檢查:
- 遍歷陣列中的每個元素
- 檢查
set.contains(nums[i]) - 如果包含,立即返回
true - 如果不包含,將元素加入 HashSet
- 返回結果:
- 如果沒有重複,返回
false
- 如果沒有重複,返回
例子說明 #
nums = [1,2,3,1]
| 步驟 | 當前元素 | HashSet內容 | 檢查結果 | 操作 |
|---|---|---|---|---|
| 初始化 | - | [] | - | 創建空的HashSet |
| 第1輪 | 1 | [] | false | 1不在set中,加入set |
| 第2輪 | 2 | [1] | false | 2不在set中,加入set |
| 第3輪 | 3 | [1,2] | false | 3不在set中,加入set |
| 第4輪 | 1 | [1,2,3] | true | 1已在set中,發現重複 |
| 最終結果 | - | [1,2,3] | true | 返回true,有重複元素 |
完整程式碼 #
java
class Solution {
public boolean containsDuplicate(int[] nums) {
// 創建HashSet來存儲已經出現過的數字
HashSet<Integer> set = new HashSet<>();
// 遍歷陣列中的每個元素
for(int i = 0; i < nums.length; i++){
// 檢查當前元素是否已經在HashSet中
if(set.contains(nums[i])){
// 如果包含,表示有重複,立即返回true
return true;
}
// 如果不包含,將當前元素加入HashSet
set.add(nums[i]);
}
// 如果遍歷完畢都沒有發現重複,返回false
return false;
}
}時間複雜度 #
- 時間複雜度:
O(n),其中 n 是陣列的長度,需要遍歷所有元素 - 空間複雜度:
O(n),最壞情況下 HashSet 需要存儲所有不重複的元素