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