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

In tất cả các phần tử riêng biệt của một mảng số nguyên nhất định trong C ++


Trong bài toán này, chúng ta được cung cấp một mảng các giá trị nguyên. Nhiệm vụ của chúng ta là in tất cả các phần tử riêng biệt của mảng. Đầu ra chỉ nên chứa các giá trị riêng biệt.

Hãy lấy một ví dụ để hiểu vấn đề

Input: array = {1, 5, 7, 12, 1, 6, 10, 7, 5}
Output: 1 5 7 12 6 10

Để giải quyết vấn đề này, chúng ta sẽ phải kiểm tra tính duy nhất của các phần tử của mảng. Đối với điều này, chúng tôi sẽ sử dụng hai vòng lặp lồng nhau, vòng bên ngoài sẽ nhận các giá trị và vòng bên trong sẽ kiểm tra phần còn lại của các giá trị với nó. Nếu có nhiều hơn một giá trị, chỉ in một giá trị.

Ví dụ

Mã này cho thấy việc triển khai giải pháp của chúng tôi,

#include <iostream>
using namespace std;
void printDistinctValues(int arr[], int n) {
   for (int i=0; i<n; i++){
      int j;
      for (j=0; j<i; j++)
      if (arr[i] == arr[j])
         break;
      if (i == j)
         cout<<arr[i]<<"\t";
   }
}
int main(){
   int arr[] = {1, 5, 7, 12, 1, 6, 10, 7, 5};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"Distinct values of the array are :\n";
   printDistinctValues(arr, n);
   return 0;
}

Đầu ra

Distinct elements of the array are −
1 5 6 7 10 12

Giải pháp này dễ dàng nhưng sử dụng hai vòng lặp làm phức tạp thứ tự của n 2 .

Một phương pháp phức tạp hơn sẽ được sử dụng sắp xếp. Trong mảng đã sắp xếp, sự xuất hiện của các số tương tự trở nên liên tiếp. Giờ đây, chúng tôi có thể in các phần tử riêng biệt một cách dễ dàng và tốn ít dung lượng hơn.

Ví dụ

Thực hiện logic của chúng tôi -

#include <bits/stdc++.h>
using namespace std;
void printDistinctElements(int arr[], int n){
   sort(arr, arr + n);
   for (int i=0; i<n; i++){
      while (i < n-1 && arr[i] == arr[i+1])
         i++;
      cout<<arr[i]<<"\t";
   }
}
int main(){
   int arr[] = {1, 5, 7, 12, 1, 6, 10, 7, 5};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"Distinct elements of the array are :\n";
   printDistinctElements(arr, n);
   return 0;
}

Đầu ra

Distinct elements of the array are −
1 5 6 7 10 12

Một giải pháp khác hiệu quả hơn là theo dõi các phần tử đã truy cập của mảng. Chúng tôi sẽ duyệt qua mảng và theo dõi tất cả các phần tử đã truy cập của mảng.

Ví dụ

Mã này cho thấy việc triển khai giải pháp của chúng tôi,

#include<bits/stdc++.h>
using namespace std;
void printDistinctElements(int arr[],int n) {
   unordered_set<int> visited;
   for (int i=0; i<n; i++){
      if (visited.find(arr[i])==visited.end()){
         visited.insert(arr[i]);
         cout<<arr[i]<<"\t";
      }
   }
}
int main () {
   int arr[] = {1, 5, 7, 12, 1, 6, 10, 7, 5};
   int n=7;
   cout<<"Distinct numbers of the array are :\n";
   printDistinctElements(arr,n);
   return 0;
}

Đầu ra

Distinct numbers of the array are −
1 5 7 12 6 10