思路:
使用两个数组,a[]存储所有arr中重复的元素,另一个数组b[]下标是arr中的元素值,数组元素是对应下标值出现的次数。时间复杂度是O(n)
需要注意的是,b[]需要申请静态数组,因为如果使用动态数组相邻两个元素值差别的话会发生溢出;a[]需要时动态数组,因为元素个数不确定同时所有元素都是有效输出,直接遍历输出即可。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 #define MAXSIZE 100 5 6 int b[MAXSIZE] = { 0 }; 7 vector<int>a; 8 int arr[5] = { 1,4,3,1,4 }; 9 10 void repeat(int*arr, int n) { 11 for (int i = 0; i < n; i++) { 12 b[arr[i]]++; 13 } 14 for (int i = 0; i < MAXSIZE; i++) { 15 if (b[i] > 1) 16 a.push_back(i); 17 } 18 } 19 20 int main() { 21 repeat(arr, 5); 22 for (int i = 0; i < a.size(); i++) 23 cout << a[i] << " "; 24 return 0; 25 }