Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm các bản sao trong một mảng nhất định khi các phần tử không bị giới hạn trong một phạm vi trong C ++

Giả sử chúng ta có một mảng gồm N số nguyên. Ở đây chúng ta sẽ in các bản sao của mảng đã cho. Nếu không có bản sao nào như vậy thì trả về -1. Vì vậy, nếu mảng giống như [12, 15, 12, 3, 6, 12, 3, 48, 56, 8, 48], thì các bản sao là:[12, 3, 48]

Ở đây chúng ta sẽ sử dụng bản đồ không có thứ tự trong C ++. Vì vậy, lúc đầu khi một phần tử được lấy, hãy kiểm tra xem phần tử đó có trong bản đồ hay không, nếu phần tử này có, sau đó chỉ cần in phần tử đó dưới dạng bản sao, nếu không chỉ cần thêm phần tử đó vào bản đồ.

Ví dụ

#include<iostream>
#include<unordered_map>
using namespace std;
void displayDuplicates(int arr[], int n) {
   unordered_map<int, int> occurrence;
   for (int i=0; i<n; i++)
   occurrence[arr[i]]++;
   bool duplicate = false;
   unordered_map<int, int>:: iterator itr;
   for (itr=occurrence.begin(); itr!=occurrence.end(); itr++) {
      if (itr->second > 1) {
         cout << itr->first << " ";
         duplicate = true;
      }
   }
   if (duplicate == false)
   cout << "-1";
}
int main() {
   int arr[] = {12, 15, 12, 3, 6, 12, 3, 48, 56, 8, 48};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Duplicate elements are: ";
   displayDuplicates(arr, n);
}

Đầu ra

Duplicate elements are: 12 3 48