一、使用STL中的set容器
set是一個有序且不能重複的容器,C++中STL提供了set容器可以快速去重。通過set容器可將元素插入到set中,但不會重複,同時可以使用unique()函數將重複元素排到後面,然後通過erase()函數將重複元素刪除。
#include <set> #include <algorithm> #include <vector> using namespace std; void removeDuplicates(int arr[], int n){ set<int> s; for (int i = 0; i < n; i++){ s.insert(arr[i]); } copy(s.begin(), s.end(), arr); int newSize = s.size(); for (int i = newSize; i < n; i++){ arr[i] = 0; } }
二、使用C++11中的unique函數
C++11中的unique函數可以在數組中移除相鄰的重複元素,但不會真正地刪除元素。可以結合erase函數刪除後面的重複元素。unique函數需要注意的是,傳入的數組必須是有序的。為了在不使用sort函數的情況下實現有序的數組,可以使用algorithm頭文件中的sort函數。
#include <algorithm> using namespace std; void removeDuplicates(int arr[], int n){ sort(arr, arr + n); int newSize = unique(arr, arr + n) - arr; for (int i = newSize; i < n; i++){ arr[i] = 0; } }
三、使用雙重循環
雙重循環是一種樸素的方法。先用第一個循環遍歷每一個元素,然後用第二個循環遍歷每一個和該元素進行比較,如果找到相同的元素,則將其後面所有元素向前移動,最後將新的數組長度減去重複元素的個數。
void removeDuplicates(int arr[], int n){ int newSize = n; for (int i = 0; i < newSize; i++){ for (int j = i + 1; j < newSize; j++){ if (arr[i] == arr[j]){ for (int k = j; k < newSize; k++){ arr[k] = arr[k + 1]; } newSize--; j--; } } } for (int i = newSize; i < n; i++){ arr[i] = 0; } }
原創文章,作者:UDZX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/145521.html