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

Đếm phần tử có trong mảng đầu tiên nhưng không có trong mảng thứ hai trong C ++

Chúng ta được cung cấp một mảng có kích thước bất kỳ chứa các phần tử nguyên và nhiệm vụ là tính số phần tử có trong mảng đầu tiên nhưng không có trong mảng thứ hai ..

Mảng là một loại cấu trúc dữ liệu có thể lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng kiểu. Mảng được sử dụng để lưu trữ một tập hợp dữ liệu, nhưng thường hữu ích hơn nếu coi một mảng là một tập hợp các biến cùng kiểu.

Ví dụ

Input− int arr_1[] = {1, 2, 3, 4}
      Int arr_2[] = {1, 5, 6, 7, 8}
Output − count is 3

Giải thích - Trong arr_1 đã cho, chúng ta có các phần tử 1, 2, 3 và 4 và trong arr_2, chúng ta có 1, 5, 6,7 và 8. Phần tử 1 có mặt trong cả hai mảng, do đó, chúng tôi sẽ không tính nó và do đó số đếm trở thành 3.

Input − int arr_1[] = {10, 20, 30, 40, 50}
      Int arr_2[] = {10, 20, 30, 60}
Output − count is 2

Giải thích - Trong arr_1 đã cho, chúng ta có các phần tử 10, 20, 30, 40 và 50 và trong arr_2, chúng ta có 10, 20, 30 và 60. Các phần tử 10, 20 và 30 có mặt trong cả hai mảng, do đó, chúng ta sẽ không tính chúng và do đó số lượng trở thành 2.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Tạo hai mảng, giả sử arr_1 [] và arr_2 []

  • Tính độ dài của cả hai mảng bằng cách sử dụng hàm length () sẽ trả về một giá trị nguyên theo các phần tử trong một mảng.

  • Lấy một biến tạm thời sẽ lưu trữ số lượng phần tử chỉ có trong mảng đầu tiên.

  • Tạo một bản đồ không có thứ tự, hãy nói lên

  • Bắt đầu vòng lặp cho với tôi đến 0 cho đến khi tôi nhỏ hơn kích thước của arr_1

  • Tăng lên [arr_1 [i]] với 1

  • Bắt đầu một vòng lặp khác cho với tôi đến 0 cho đến khi tôi nhỏ hơn kích thước của arr_2

  • Trong vòng lặp, hãy kiểm tra xem up.find (arr_2 [i])! =Up.end () và up [arr_2 [i]]! =0

  • giảm lên [arr_2 [i]] 1

  • Bắt đầu một vòng lặp khác cho với tôi đến 0 cho đến khi tôi nhỏ hơn kích thước của arr_1

  • Trong vòng lặp, hãy kiểm tra xem [arr_1 [i]! =0

  • Sau đó, tăng số lượng lên 1 và thiết lập [arr_1 [i]] =0

  • Trả lại số lượng

  • In kết quả.

Ví dụ

#include <iostream>
#include<unordered_map>
using namespace std;
int elements_count(int arr_1[], int arr_2[], int m, int n){
   bool f = false;
   int result = 0;
   // map to store frequency of elements present in a
   unordered_map<int, int> up;
   for (int i = 0; i < m; i++){
      up[arr_1[i]]++;
   }
   // check if the elements of b
   // is present in b or not
   for (int i = 0; i < n; i++)
   if (up.find(arr_2[i]) != up.end() && up[arr_2[i]] != 0){
      up[arr_2[i]]--;
   }
   // count the elements of a whose
   // frequency is more than b
   for (int i = 0; i < m; i++) {
      if (up[arr_1[i]] != 0){
         result++;
         up[arr_1[i]] = 0;
      }
   }
   return result;
}
// Main function
int main(){
   int arr_1[] = { 2, 4, 4, 6, 6, 6, 8, 9 };
   int arr_2[] = { 2, 2, 4, 6, 6 };
   int m = sizeof(arr_1)/sizeof(arr_1[0]);
   int n = sizeof(arr_2)/sizeof(arr_2[0]);
   cout <<"count is "<<elements_count(arr_1, arr_2, m, n);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -

Số lượng
count is 4