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

การนับที่แตกต่างกันอย่างแน่นอนในอาร์เรย์ที่เรียงลำดับใน C ++?


อาร์เรย์คือชุดขององค์ประกอบประเภทข้อมูลเดียวกัน อาร์เรย์ที่จัดเรียง เป็นอาร์เรย์ที่มีองค์ประกอบที่จัดเก็บไว้ในลำดับจากน้อยไปมากหรือมากไปหาน้อย

การนับที่แตกต่างกันคือจำนวนองค์ประกอบที่ไม่เท่ากัน

การนับที่แตกต่างแบบสัมบูรณ์คือการนับค่าสัมบูรณ์ขององค์ประกอบอย่างชัดเจน เช่น องค์ประกอบที่ไม่มีเครื่องหมาย (ค่าที่ไม่ได้ลงนาม)

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

ตัวอย่างเช่น

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