เราได้รับอาเรย์ของจำนวนเต็มบวก เป้าหมายคือหาจำนวนคู่ของสมาชิกของ arr[] ที่เงื่อนไข LCM(arr[i], arr[j]) > minimum of (arr[i], arr[j]) นั่นคือ ค่าต่ำสุดร่วมของสมาชิกในคู่มากกว่าค่าต่ำสุดของทั้งสอง
หมายเหตุ − คู่ (arr[i], arr[j]) เหมือนกับ (arr[j],arr[i]) อย่า นับซ้ำ
มาดูตัวอย่าง
อินพุต − arr[] = [ 1,5,4,2 ]
เอาต์พุต − จำนวนคู่ในอาเรย์ที่ LCM(arr[i], arr[j]) > min(arr[i],arr[j]) คือ 6
คำอธิบาย − ทั้งหมด 6 คู่ คือ −
Pair 1 (1,5) LCM is 5 > 1 Pair 2 (1,4) LCM is 4 > 1 Pair 3 (1,2) LCM is 2 > 1 Pair 4 (5,4) LCM is 20 > 4 Pair 5 (5,2) LCM is 10 > 2 Pair 6 (4,2) LCM is 4 > 2
อินพุต − arr[] = [ 3,3,6 ]
เอาต์พุต − จำนวนคู่ในอาเรย์ที่ LCM(arr[i], arr[j]) > min(arr[i],arr[j]) คือ 2
คำอธิบาย − ทั้งหมด 2 คู่ คือ −
Pair 1 (3,6) LCM is 6 > 3 Pair 2 (3,6) LCM is 6 > 3
แนวทางที่ใช้ในโปรแกรม
เงื่อนไขข้างต้นจะเป็นเท็จเฉพาะที่ arr[i]==arr[j] คู่จะเกิดระหว่างสมาชิกที่ไม่ซ้ำกัน ใช้ unordered_map เก็บความถี่ของสมาชิกที่ไม่ซ้ำของอาเรย์ ตอนนี้เพื่อลบคู่สมาชิกเหมือนกันทั้งหมด คำนวณสำหรับแต่ละความถี่ คูาสูงสุดเป็น (freq * (freq-1)/2) บวกคำนวณทั้งหมดเข้า count
อาเรย์ทั้งหมดมี size สมาชิก ดังนั้นคูาสูงสุด = size(size-1)/2
ผลลัพธ์จะเป็น pairs - count (คู่ทั้งหมด - คู่ที่มีสมาชิกเหมือนกัน)
- รับอาเรย์จำนวนเต็ม
- ฟังก์ชัน
conditional_pair(int arr[], int size)รับอาเรย์และขนาด คืนจำนวนคู่ที่เงื่อนไขเป็นจริง - กำหนด
countเริ่มต้น 0 - สร้าง
unordered_map<int, int> umสำหรับสมาชิกของarr[]และความถี่ - เดินทางแมปด้วยลูป FOR สำหรับแต่ละความถี่
temp = it.second(it=iterator) บวกtemp*(temp-1)/2เข้าcountคู่ทั้งหมดที่เป็นไปได้สำหรับtempจำนวนสมาชิก - ตอนนี้
countมีคู่ของสมาชิกเหมือนกันทั้งหมดที่จะไม่นับในกรณีของเรา - คำนวณคู่ที่เป็นไปได้ทั้งหมดสำหรับสมาชิกอาเรย์เป็น
temp=size*(size-1)/2 - อัปเดต
countเป็นcount - temp - คืน
count
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int conditional_pair(int arr[], int size){
int count = 0;
unordered_map<int, int> um;
for (int i = 0; i < size; i++){
um[arr[i]]++;
}
for (auto it : um){
int temp = it.second;
count = count + temp * (temp - 1) / 2;
}
int temp = (size * (size - 1)) / 2;
count = temp - count;
return count;
}
int main(){
int arr[] = { 4, 1, 7, 3, 2};
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are: "<<conditional_pair(arr, size);
return 0;
}
เอาต์พุต
หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are: 10