Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับคู่ที่เกิดจากอาร์เรย์ย่อยขององค์ประกอบที่แตกต่างกันใน C++


เราได้รับอาร์เรย์ arr[] ที่มีองค์ประกอบจำนวนเต็ม เป้าหมายคือการหาจำนวนคู่ที่สามารถเกิดขึ้นได้จากองค์ประกอบของอาร์เรย์ย่อยของ arr[] ซึ่งแต่ละ subarray มีองค์ประกอบที่แตกต่างกันเท่านั้น หากอาร์เรย์เป็น [ 1,2,2,3,3 ] ดังนั้นอาร์เรย์ย่อยที่มีองค์ประกอบที่แตกต่างกันเท่านั้นจะเป็น [ 1,2 ] และ [ 2,3 ] และคู่จะเป็น (1,2) และ (2,3) ดังนั้นการนับคู่คือ 2

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − arr[] ={1,2,5,3 }

ผลผลิต − จำนวนคู่ที่เกิดจากอาร์เรย์ย่อยขององค์ประกอบที่แตกต่างกันคือ − 6

คำอธิบาย − อาร์เรย์ย่อยที่มีองค์ประกอบต่างกัน ได้แก่ [ 1,2,5, 3] คู่ที่เป็นไปได้ (1,2) (1,3) (1,5), (2,5), (2,3), (5,3)

รวม 6 คู่

ป้อนข้อมูล − arr[] ={1,2,1,2,3}

ผลผลิต − จำนวนคู่ที่เกิดจากอาร์เรย์ย่อยขององค์ประกอบที่แตกต่างกันคือ − 5

คำอธิบาย − อาร์เรย์ย่อยที่มีองค์ประกอบต่างกันคือ −

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

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ใช้อาร์เรย์จำนวนเต็มเป็นอินพุต

  • ฟังก์ชัน different_pairs(int arr[], int size) รับอาร์เรย์และส่งกลับคู่ Count ที่เกิดจากอาร์เรย์ย่อยขององค์ประกอบที่แตกต่างกัน

  • นับเริ่มต้นเป็น 0 ใช้ตัวแปร start=end=0

  • ตรวจสอบเวกเตอร์ (ขนาด เท็จ) เพื่อทำเครื่องหมายองค์ประกอบในหน้าต่าง

  • เริ่มวนรอบในขณะที่เริ่มน้อยกว่าขนาด

  • ภายในลูป ให้เริ่มลูปอื่นในขณะที่เริ่มน้อยกว่าขนาด และ check[arr[star]] =0 จากนั้นตั้งค่า count เป็น start - end และตั้งค่า check[arr[start]] เป็นจริง และเพิ่มการเริ่มต้น 1

  • เริ่มวนรอบในขณะที่สิ้นสุดน้อยกว่าเริ่มต้นและการเริ่มต้นไม่เท่ากับขนาด AND check[arr[start]] =true จากนั้นตั้งค่า check[arr[end]] =false และเพิ่มจุดสิ้นสุดด้วย 1

  • คืนจำนวน

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#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;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

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