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

องค์ประกอบอาร์เรย์ที่มีความถี่เฉพาะใน C ++?


อาร์เรย์ เป็นคอนเทนเนอร์ขององค์ประกอบประเภทข้อมูลเดียวกัน

ความถี่เฉพาะ หมายความว่าจำนวนการเกิดขึ้นขององค์ประกอบของอาร์เรย์เป็นจำนวนเฉพาะ

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

มาดูตัวอย่างกัน

Input: str = “helloworld”
Output: 2

คำอธิบาย

จำนวนการเกิดของอักขระคือ −

h -> 1
e -> 1
l -> 3
o -> 2
w-> 1
r -> 1
d -> 1

l เกิดขึ้นจำนวนเฉพาะของจำนวนครั้งเช่น 3 และ o เกิดขึ้นจำนวนเฉพาะเช่น 2

เริ่มสำรวจสตริงและนับการเกิดขึ้นของอักขระแต่ละตัวโดยใช้แผนที่ใน C++ และตรวจสอบว่าการเกิดขึ้นเป็นจำนวนเฉพาะหรือไม่ หากเป็นจำนวนเฉพาะให้เพิ่มจำนวนขึ้นมิฉะนั้นจะไม่

อัลกอริทึม

ในการตรวจสอบความถี่เฉพาะขององค์ประกอบ เราจะตรวจสอบการเกิดขึ้นขององค์ประกอบ และตรวจสอบว่าการนับนั้นเป็นจำนวนเฉพาะหรือไม่ สำหรับสิ่งนี้ เราจะนำแผนที่มาพิจารณา

ตัวอย่าง

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int check_prime(int n) {
   if (n <= 1)
      return 0;
   if (n <= 3)
      return 1;
   if (n % 2 == 0 || n % 3 == 0)
      return 0;
   for (int i = 5; i * i <= n; i = i + 6)
      if (n % i == 0 || n % (i + 2) == 0)
         return 0;
      return 1;
}
int countPrimeFrequent(string s) {
   int count = 0;
   unordered_map<char, int> mp;
   for (int i = 0; i < s.length(); i++)
      mp[s[i]]++;
   for (auto it = mp.begin(); it != mp.end(); it++) {
      if (check_prime(it->second))
         count++;
   }
   return count;
}
int main() {
   string s = "helloworld";
   cout << countPrimeFrequent(s);
   return 0;
}

ผลลัพธ์

The repeat elements of the array are : 2