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

Đếm các cặp được tạo bởi các mảng con phần tử riêng biệt trong C ++

Chúng ta được cung cấp một mảng arr [] chứa các phần tử nguyên. Mục đích là tìm số lượng các cặp có thể được tạo thành bởi các phần tử của mảng con của arr [] sao cho mỗi mảng con chỉ có các phần tử riêng biệt. Nếu mảng là [1,2,2,3,3] thì các mảng con chỉ có các phần tử riêng biệt sẽ là [1,2] và [2,3]. Và các cặp sẽ là (1,2) và (2,3) do đó số lượng các cặp là 2.

Hãy cho chúng tôi hiểu với các ví dụ

Đầu vào - arr [] ={1,2,5,3}

Đầu ra - Số lượng các cặp được tạo thành bởi các mảng con phần tử riêng biệt là - 6

Giải thích - Các mảng con với các phần tử riêng biệt là:[1,2,5, 3], các cặp có thể có (1,2), (1,3), (1,5), (2,5), (2,3), (5,3)

Tổng số 6 cặp.

Đầu vào - arr [] ={1,2,1,2,3}

Đầu ra - Số lượng các cặp được tạo thành bởi các mảng con phần tử riêng biệt là - 5

Giải thích - Các mảng con có các phần tử riêng biệt là -

[1,2] - pairs: (1,2)
[2,1] - pairs: (2,1)
[1,2,3] - pairs : (1,2), (2,3), (1,3)
Total pairs : 5

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

  • Lấy một mảng số nguyên làm đầu vào.

  • Hàm diff_pairs (int arr [], int size) nhận mảng và trả về các cặp Đếm được tạo thành bởi các mảng con phần tử riêng biệt.

  • Lấy số lượng ban đầu là 0. Lấy các biến start =end =0.

  • Kiểm tra vectơ (kích thước, sai) để đánh dấu các phần tử trong cửa sổ.

  • Vòng lặp bắt đầu WHILE cho đến khi bắt đầu nhỏ hơn kích thước

  • Bên trong vòng lặp, bắt đầu một vòng lặp khác WHILE cho đến khi bắt đầu nhỏ hơn kích thước VÀ kiểm tra [arr [star]] =0, sau đó đặt số lượng là bắt đầu - kết thúc và đặt kiểm tra [arr [start]] là đúng và cũng tăng số bắt đầu bằng 1.

  • Bắt đầu Vòng lặp WHILE cho đến khi kết thúc ít hơn bắt đầu VÀ bắt đầu không bằng kích thước VÀ kiểm tra [arr [start]] =true sau đó đặt kiểm tra [arr [end]] =false và cũng tăng kết thúc bằng 1.

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

  • In kết quả.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int distinct_pairs(int arr[], int size){
   int count = 0;
   int start = 0;
   int end = 0;
   vector<bool> check(size, false);
   while (start < size){
      while (start < size && !check[arr[start]]){
         count += (start - end);
         check[arr[start]] = true;
         start++;
      }
      while (end < start && (start != size && check[arr[start]])){
         check[arr[end]] = false;
         end++;
      }
   }
   return count;
}
int main(){
   int arr[] = {5, 1, 8, 2, 1, 7, 9, 1};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs formed by distinct element sub-arrays are: "<< distinct_pairs(arr, size);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of pairs formed by distinct element sub-arrays are: 17