เราได้รับอาร์เรย์ที่ไม่เรียงลำดับของขนาดใดๆ ที่มีองค์ประกอบที่ซ้ำกัน และภารกิจคือการคำนวณจำนวนองค์ประกอบที่แตกต่างกันในอาร์เรย์
อาร์เรย์ประเภทโครงสร้างข้อมูลที่สามารถจัดเก็บคอลเล็กชันแบบต่อเนื่องที่มีขนาดคงที่ขององค์ประกอบประเภทเดียวกัน อาร์เรย์ใช้เพื่อจัดเก็บชุดข้อมูล แต่มักจะมีประโยชน์มากกว่าที่จะคิดว่าอาร์เรย์เป็นชุดของตัวแปรประเภทเดียวกัน
ตัวอย่าง
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