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

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


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

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

ตัวอย่าง

Input− int arr[] = {1, 1, 2, 3, 3, 4, 4}
Output − count is 4

คำอธิบาย − ในอาร์เรย์ที่กำหนดมีองค์ประกอบที่แตกต่างกัน 4 รายการ ได้แก่ 1, 2, 3, 4 แต่ขนาดของอาร์เรย์คือ 7 เนื่องจากมีองค์ประกอบที่ซ้ำกัน และหน้าที่ของเราคือลบรายการที่ซ้ำกันแล้วนับองค์ประกอบอาร์เรย์

Input − int arr[] = {1, 2, 3, 4, 5, 5, 5, 5}
Output − count is 5

คำอธิบาย - ในอาร์เรย์ที่กำหนดมีองค์ประกอบที่แตกต่างกัน 5 องค์ประกอบ ได้แก่ 1, 2, 3, 4 และ 5 แต่ขนาดของอาร์เรย์คือ 8 เนื่องจากมีองค์ประกอบที่ซ้ำกัน และหน้าที่ของเราคือลบรายการที่ซ้ำกันแล้วนับองค์ประกอบอาร์เรย์

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

การใช้ฟังก์ชัน sort()

  • สร้างอาร์เรย์ของสมมติว่า arr[]

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

  • เรียกใช้ฟังก์ชัน sort และส่งอาร์เรย์และขนาดของอาร์เรย์เป็นพารามิเตอร์

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

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

  • ภายในลูป ให้รันในขณะที่ i

  • ในขณะที่เพิ่มค่าของ i

  • และภายในเพิ่มมูลค่าการนับ

  • จำนวนคืน

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

ไม่มีการเรียงลำดับ

  • สร้างอาร์เรย์ของสมมติว่า arr[]

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

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

  • เริ่มวนรอบด้วย i ถึง 1 จนกว่า i จะน้อยกว่าขนาดของอาร์เรย์

  • ภายในลูป ให้ตั้งค่า j เป็น 0 และเริ่มต้นลูปอื่นด้วย j ถึง 0 และ j น้อยกว่า i และเพิ่ม j wth 1

  • ภายในลูปนี้ ตรวจสอบว่า arr[i] =arr[j] แล้วแตกหรือไม่

  • ภายในลูปนี้ ตรวจสอบว่า i =j แล้วเพิ่มจำนวนขึ้น 1

  • จำนวนคืน

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

ตัวอย่าง

ด้วยการเรียงลำดับ

#include <algorithm>
#include <iostream>
using namespace std;
int distinct_elements(int arr[], int n){
   // Sorting the array
   sort(arr, arr + n);
   // Traverse the sorted array
   int count = 0;
   for (int i = 0; i < n; i++){
      // Moving the index when duplicate is found
      while (i < n - 1 && arr[i] == arr[i + 1]){
         i++;
      }
      count++;
   }
   return count;
}
// Main Function
int main(){
   int arr[] = { 3, 6, 5, 8, 2, 3, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout <<"count is "<<distinct_elements(arr, n);
   return 0;
}

ผลลัพธ์

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

count is 6

ตัวอย่าง

ไม่มีการเรียงลำดับ

#include <iostream>
using namespace std;
int countDistinct(int a[], int size){
   int i, j, count = 1;
   for (i = 1; i < size; i++){
      for (j = 0; j < i; j++){
         if (a[i] == a[j]){
            break;
         }
      }
      if (i == j){
         count++;
      }
   }
   return count;
}
// Main function
int main(){
   int a[] = { 3, 6, 5, 8, 2, 3, 4 };
   int size = sizeof(a) / sizeof(a[0]);
   cout << "count is "<<countDistinct(a, size);
   return 0;
}

ผลลัพธ์

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

count is 6