給定整數陣列 nums,判斷是否包含任意重複元素。至少一個值出現 ≥ 2 次回傳 true,否則 false。
排序使相同元素相鄰。遍歷檢查 nums[i] == nums[i-1]。
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int n = nums.size();
if (n < 2) return false;
sort(nums.begin(), nums.end());
for (int i = 1; i < n; ++i)
if (nums[i] == nums[i-1]) return true;
return false;
}
};
O(n log n)(排序主導)。O(1) 或 O(log n)(排序棧空間)。修改原陣列。遍歷陣列,用 unordered_set 或 unordered_map 記錄已見元素。發現重複即回傳 true。
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> seen;
for (int x : nums) {
if (seen.count(x)) return true;
seen.insert(x);
}
return false;
}
};
O(n) 平均。O(n)。不修改原陣列。| 指標 | 排序法 | 哈希表法 |
|---|---|---|
| 時間複雜度 | O(n log n) | O(n) 平均 |
| 空間複雜度 | O(1) 額外 | O(n) |
| 修改輸入 | 是 | 否 |
| 適用場景 | 空間受限、允許修改輸入 | 追求速度、不可修改輸入 |
<= k,用哈希表記錄最新索引。<= t 且索引差 <= k,用有序集合維護滑動窗口。