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

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

เราได้รับอาร์เรย์ arr[] ที่มีองค์ประกอบจำนวนเต็ม เป้าหมายคือหาจำนวนคู่ที่สามารถสร้างได้จากองค์ประกอบของเซิร์ฟอาร์เรย์ของ arr[] โดยที่แต่ละเซิร์ฟอาร์เรย์มีเฉพาะองค์ประกอบที่แตกต่างกัน หากอาร์เรย์คือ [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] - คู่: (1,2) 
[2,1] - คู่: (2,1) 
[1,2,3] - คู่: (1,2), (2,3), (1,3) 
รวมคู่: 5

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

  • รับอาร์เรย์จำนวนเต็มเป็นอินพุต
  • ฟังก์ชัน distinct_pairs(int arr[], int size) รับอาร์เรย์และคืนค่าจำนวนคู่ที่สร้างจากเซิร์ฟอาร์เรย์องค์ประกอบที่แตกต่างกัน
  • ตั้งค่า count เริ่มต้นเป็น 0 ใช้ตัวแปร start=end=0
  • ใช้ vector check(size, false) เพื่อทำเครื่องหมายองค์ประกอบในหน้าต่าง
  • เริ่มลูป WHILE จนกว่า start จะน้อยกว่า size
  • ภายในลูป เริ่มลูป WHILE อีกอันจนกว่า start น้อยกว่า size และ check[arr[start]] = 0 แล้วตั้ง count เป็น start - end และตั้ง check[arr[start]] เป็น true และเพิ่ม start ขึ้น 1
  • เริ่มลูป WHILE จนกว่า end น้อยกว่า start และ start ไม่เท่ากับ size และ check[arr[start]] = true แล้วตั้ง check[arr[end]] = false และเพิ่ม end ขึ้น 1
  • คืนค่า count
  • พิมพ์ผลลัพธ์

ตัวอย่างโค้ด

#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