給定一個整數數組,判斷是否存在重複元素。若任意值出現至少兩次返回 true,否則返回 false。
先排序,再檢查相鄰元素是否相等。
bool containsDuplicate(vector& nums) {
if (nums.size() <= 1) return false;
sort(nums.begin(), nums.end());
for (size_t i = 1; i < nums.size(); ++i)
if (nums[i] == nums[i-1]) return true;
return false;
}
時間 O(n log n),空間 O(1)(原地排序)。
遍歷數組,用 unordered_set 記錄已見元素,發現重複即返回。
bool containsDuplicate(vector& nums) {
unordered_set seen;
for (int x : nums) {
if (seen.count(x)) return true;
seen.insert(x);
}
return false;
}
時間 O(n) 平均,空間 O(n)。
先找最大最小值,分配計數陣列,遍歷檢查計數 > 1。但需注意數值範圍過大時記憶體壓力。