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

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


เราได้รับอาร์เรย์ขนาดใดๆ ที่มีองค์ประกอบจำนวนเต็ม และภารกิจคือการคำนวณจำนวนองค์ประกอบที่มีอยู่ในอาร์เรย์แรก แต่ไม่ใช่ในอาร์เรย์ที่สอง..

อาร์เรย์ประเภทโครงสร้างข้อมูลที่สามารถจัดเก็บคอลเล็กชันแบบต่อเนื่องที่มีขนาดคงที่ขององค์ประกอบประเภทเดียวกัน อาร์เรย์ใช้เพื่อจัดเก็บชุดข้อมูล แต่มักจะมีประโยชน์มากกว่าที่จะคิดว่าอาร์เรย์เป็นชุดของตัวแปรประเภทเดียวกัน

ตัวอย่าง

Input− int arr_1[] = {1, 2, 3, 4}
      Int arr_2[] = {1, 5, 6, 7, 8}
Output − count is 3

คำอธิบาย − ใน arr_1 ที่กำหนด เรามีองค์ประกอบ 1, 2, 3 และ 4 และใน arr_2 เรามี 1, 5, 6,7 และ 8 องค์ประกอบที่ 1 มีอยู่ในอาร์เรย์ทั้งสอง ดังนั้น เราจะไม่นับมันและด้วยเหตุนี้ นับเป็น 3

Input − int arr_1[] = {10, 20, 30, 40, 50}
      Int arr_2[] = {10, 20, 30, 60}
Output − count is 2

คำอธิบาย − ใน arr_1 ที่กำหนด เรามีองค์ประกอบ 10, 20, 30, 40 และ 50 และใน arr_2 เรามี 10, 20, 30 และ 60 องค์ประกอบ 10, 20 และ 30 มีอยู่ในอาร์เรย์ทั้งสองดังนั้น เราจะไม่นับ พวกเขาจึงนับเป็น 2

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

  • สร้างสองอาร์เรย์ สมมติว่า arr_1[] และ arr_2[]

  • คำนวณความยาวของอาร์เรย์ทั้งสองโดยใช้ฟังก์ชัน length() ที่จะคืนค่าจำนวนเต็มตามองค์ประกอบในอาร์เรย์

  • ใช้ตัวแปรชั่วคราวที่จะเก็บจำนวนองค์ประกอบที่มีอยู่ในอาร์เรย์แรกเท่านั้น

  • สร้างแผนที่แบบไม่เรียงลำดับกันเถอะ

  • เริ่มวนซ้ำสำหรับ i ถึง 0 จนกว่า i จะน้อยกว่าขนาดของ arr_1

  • เพิ่มขึ้น[arr_1[i]] ด้วย 1

  • เริ่มการวนซ้ำอีกครั้งสำหรับ i ถึง 0 จนกว่า i จะน้อยกว่าขนาดของ arr_2

  • ภายในลูป ให้ตรวจสอบว่า up.find(arr_2[i])!=up.end() และ up[arr_2[i]]!=0

  • ลดลงขึ้น[arr_2[i]] ทีละ 1

  • เริ่มการวนซ้ำอีกครั้งสำหรับ i ถึง 0 จนกว่า i จะน้อยกว่าขนาดของ arr_1

  • ภายในลูป ตรวจสอบว่า up[arr_1[i]!=0

  • จากนั้น เพิ่มจำนวนขึ้น 1 และตั้งค่า[arr_1[i]] =0

  • คืนจำนวน

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

ตัวอย่าง

#include <iostream>
#include<unordered_map>
using namespace std;
int elements_count(int arr_1[], int arr_2[], int m, int n){
   bool f = false;
   int result = 0;
   // map to store frequency of elements present in a
   unordered_map<int, int> up;
   for (int i = 0; i < m; i++){
      up[arr_1[i]]++;
   }
   // check if the elements of b
   // is present in b or not
   for (int i = 0; i < n; i++)
   if (up.find(arr_2[i]) != up.end() && up[arr_2[i]] != 0){
      up[arr_2[i]]--;
   }
   // count the elements of a whose
   // frequency is more than b
   for (int i = 0; i < m; i++) {
      if (up[arr_1[i]] != 0){
         result++;
         up[arr_1[i]] = 0;
      }
   }
   return result;
}
// Main function
int main(){
   int arr_1[] = { 2, 4, 4, 6, 6, 6, 8, 9 };
   int arr_2[] = { 2, 2, 4, 6, 6 };
   int m = sizeof(arr_1)/sizeof(arr_1[0]);
   int n = sizeof(arr_2)/sizeof(arr_2[0]);
   cout <<"count is "<<elements_count(arr_1, arr_2, m, n);
   return 0;
}

ผลลัพธ์

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

count is 4