อาร์เรย์คือชุดขององค์ประกอบประเภทข้อมูลเดียวกัน อาร์เรย์ที่จัดเรียง เป็นอาร์เรย์ที่มีองค์ประกอบที่จัดเก็บไว้ในลำดับจากน้อยไปมากหรือมากไปหาน้อย
การนับที่แตกต่างกันคือจำนวนองค์ประกอบที่ไม่เท่ากัน
การนับที่แตกต่างแบบสัมบูรณ์คือการนับค่าสัมบูรณ์ขององค์ประกอบอย่างชัดเจน เช่น องค์ประกอบที่ไม่มีเครื่องหมาย (ค่าที่ไม่ได้ลงนาม)
ในโปรแกรมนี้ เราจะพบการนับที่ไม่ซ้ำแบบสัมบูรณ์ในอาร์เรย์ที่จัดเรียง กล่าวคือ เราจะนับจำนวนค่าที่แตกต่างกัน หากพิจารณาค่าสัมบูรณ์ของแต่ละองค์ประกอบของอาร์เรย์
ตัวอย่างเช่น
Input : [-3 , 0 , 3 , 6 ] Output : 3
ในอาร์เรย์มีค่าสัมบูรณ์ที่แตกต่างกัน 3 ค่า ได้แก่ 0, 3 และ 6
เพื่อแก้ปัญหานี้ เรามีวิธีการ โดยใช้วิธีการต่างๆ
โดยใช้ชุด
ชุดประกอบด้วยองค์ประกอบที่แตกต่างกันเสมอ ดังนั้นเราจะตรวจสอบค่าสัมบูรณ์ในชุดและถ้าไม่มีเมื่อจะเพิ่มองค์ประกอบในชุด แล้วคืนค่าขนาดของชุด
อัลกอริทึม −
-
สร้างชุดข้อมูลประเภทเดียวกับอาร์เรย์
-
ค้นหาค่าสัมบูรณ์ของแต่ละองค์ประกอบและเก็บองค์ประกอบในอาร์เรย์ ชุดจะเก็บค่าเดียวแม้ว่าจะพบหลายค่าก็ตาม
-
หลังจากป้อนองค์ประกอบทั้งหมดแล้ว คืนค่าความยาวของชุด ซึ่งจะทำให้จำนวนองค์ประกอบที่แตกต่างกันคืออาร์เรย์
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {-3, 0, 2, 6};
int n = sizeof(arr)/sizeof(arr[0]);
cout << "Count of absolute distinct values : ";
unordered_set<int> s;
for (int i = 0 ; i < n; i++)
s.insert(abs(arr[i]));
int nof = s.size();
cout<<nof;
return 0;
} ผลลัพธ์
Count of absolute distinct values : 4
ใช้ตรวจสอบอาร์เรย์และนับตัวแปร
วิธีนี้ใช้ตัวแปรเดียวแทนชุด เราจะให้ตัวแปรการนับแก่คุณเพื่อนับองค์ประกอบที่แตกต่างกันของอาร์เรย์
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int arr[] = {-5, -1, 0, 5, 8};
int n = sizeof(arr)/sizeof(arr[0]);
cout << "Count of absolute distinct values : ";
int count = n;
int i = 0, j = n - 1, sum = 0;
while (i < j) {
while (i != j && arr[i] == arr[i + 1])
count--, i++;
while (i != j && arr[j] == arr[j - 1])
count--, j--;
if (i == j)
break;
sum = arr[i] + arr[j];
if (sum == 0) {
count--;
i++, j--;
}
else if(sum < 0)
i++;
else
j--;
}
cout<< count;
return 0;
} ผลลัพธ์
Count of absolute distinct values : 4