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

นับองค์ประกอบที่อยู่ในอาร์เรย์แรกแต่ไม่อยู่ในอาร์เรย์ที่สองใน C++

เราได้รับอาร์เรย์สองชุด งานคือการนับจำนวนองค์ประกอบที่ปรากฏในอาร์เรย์แรกแต่ไม่อยู่ในอาร์เรย์ที่สอง (คำนึงถึงความถี่)

ตัวอย่าง

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 เพื่อจัดการความถี่อย่างมีประสิทธิภาพ