暴力求解法时间复杂度
O
(
n
2
)
O(n^2)
O(n2),空间复杂度
O
(
1
)
O(1)
O(1)
由于暴力求解法时间复杂度很高,几乎不使用
暴力求解法不会修改原数组
voidViolence(vector<int>& nums){int len = nums.size();
vector<int> res;for(int i =0; i < len; i++){for(int j = i +1; j < len; j++){if(nums[j]== nums[i]){
res.push_back(nums[i]);break;}}}}
哈希表法
哈希表法是一种通用的判断是否发生重复的方法
哈希法时间复杂度
O
(
n
)
O(n)
O(n),空间复杂度
O
(
n
)
O(n)
O(n)
哈希表法时间复杂度不高,比较常用
哈希表法也不会修改原数组
若元素范围固定且比较少,可以使用数组来替代哈希表
voidHashMethod(vector<int>& nums){int len = nums.size();
unordered_set<int> table;
vector<int> res;for(int i =0; i < len; i++){if(table.count(nums[i])){
res.push_back(nums[i]);}
table.insert(nums[i]);}}
排序法
排序法是一种通用的判断是否发生重复的方法
排序法时间复杂度
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn),空间复杂度
O
(
1
)
O(1)
O(1)
排序法也会修改原数组,因此使用场景有所限制
voidSortMethod(vector<int>& nums){int len = nums.size();sort(nums.begin(), nums.end());
vector<int> res;for(int i =0; i < len -1; i++){if(nums[i]== nums[i+1]){
res.push_back(nums[i]);}}}