เราได้รับอาร์เรย์สองชุด งานคือการนับจำนวนองค์ประกอบที่ปรากฏในอาร์เรย์แรกแต่ไม่อยู่ในอาร์เรย์ที่สอง (คำนึงถึงความถี่)
ตัวอย่าง
Input − int arr_1[] = {1, 2, 3, 4} Int arr_2[] = {1, 5, 6, 7, 8} Output − count is 3
คำอธิบาย − ค่า 1 อยู่ในทั้งสองอาร์เรย์ จึงไม่นับ เหลือ 2,3,4 รวม 3 ตัว
Input − int arr_1[] = {10, 20, 30, 40, 50} Int arr_2[] = {10, 20, 30, 60} Output − count is 2
คำอธิบาย − 10,20,30 อยู่ในทั้งสอง จึงนับ 40,50 เหลือ 2 ตัว
แนวทางการแก้ปัญหา
- ใช้ unordered_map เก็บความถี่ของอาร์เรย์แรก
- ลดความถี่ตามอาร์เรย์ที่สอง
- นับสมาชิกที่ความถี่ยังคงมากกว่า 0
ตัวอย่างโค้ด C++
#include <iostream>
#include <unordered_map>
using namespace std;
int elementsCount(int arr1[], int arr2[], int m, int n) {
unordered_map freq;
for (int i = 0; i < m; i++) freq[arr1[i]]++;
for (int i = 0; i < n; i++) {
if (freq.count(arr2[i]) && freq[arr2[i]] > 0) {
freq[arr2[i]]--;
}
}
int result = 0;
for (int i = 0; i < m; i++) {
if (freq[arr1[i]] > 0) {
result++;
freq[arr1[i]] = 0;
}
}
return result;
}
int main() {
int arr1[] = {2, 4, 4, 6, 6, 6, 8, 9};
int arr2[] = {2, 2, 4, 6, 6};
int m = sizeof(arr1) / sizeof(arr1[0]);
int n = sizeof(arr2) / sizeof(arr2[0]);
cout << "count is " << elementsCount(arr1, arr2, m, n);
return 0;
}
ผลลัพธ์
count is 4
บทความนี้แสดงวิธีนับสมาชิกที่อยู่ในอาร์เรย์แรกแต่ไม่อยู่ในอาร์เรย์ที่สอง โดยพิจารณาความถี่ของแต่ละค่า ใช้ unordered_map เพื่อจัดการความถี่อย่างมีประสิทธิภาพ