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

นับจำนวนครั้ง (หรือความถี่) ที่เกิดขึ้นในอาร์เรย์ที่จัดเรียงใน C++


เราได้รับอาร์เรย์ที่เรียงลำดับขององค์ประกอบประเภทจำนวนเต็มและจำนวน สมมติว่า num และภารกิจคือการคำนวณการนับจำนวนครั้งที่องค์ประกอบ num ที่กำหนดปรากฏในอาร์เรย์ .

ป้อนข้อมูล − int arr[] ={1, 1, 1,2, 3, 4}, num =1

ผลผลิต − จำนวนครั้ง (หรือความถี่) ที่เกิดขึ้นในอาร์เรย์ที่เรียงลำดับคือ − 3

ป้อนข้อมูล − int arr[] ={2, 3, 4, 5, 5, 6, -7}, num =5

ผลผลิต − จำนวนครั้ง (หรือความถี่) ที่เกิดขึ้นในอาร์เรย์ที่เรียงลำดับคือ − 2

อินพุต - int arr[] ={-1, 0, 1, 2, 3}, num =7

ผลผลิต − จำนวนครั้ง (หรือความถี่) ที่เกิดขึ้นในอาร์เรย์ที่เรียงลำดับคือ − 0

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

มีหลายวิธีที่สามารถปฏิบัติตามเพื่อแก้ปัญหาข้างต้นได้

แนวทางไร้เดียงสา

  • ประกาศอาร์เรย์ขององค์ประกอบจำนวนเต็มที่มีทั้งตัวเลขบวกและลบ และตัวแปรจำนวนเต็มที่เราต้องหาความถี่ในอาร์เรย์

  • คำนวณขนาดของอาร์เรย์และส่งข้อมูลทั้งหมดไปยังฟังก์ชันเพื่อการประมวลผลต่อไป

  • ประกาศการนับตัวแปรชั่วคราวเพื่อเก็บจำนวนครั้งที่ตัวแปร num ปรากฏขึ้น

  • เริ่มการวนซ้ำ FOR จาก i ถึง 0 จนถึงขนาดของอาร์เรย์

  • ภายในลูป ให้ตรวจสอบ IF num =arr[i] แล้วเพิ่มค่าการนับขึ้น 1

  • คืนจำนวน

  • พิมพ์ผลลัพธ์

แนวทางที่มีประสิทธิภาพ

  • ประกาศอาร์เรย์ขององค์ประกอบจำนวนเต็มที่มีทั้งตัวเลขบวกและลบ และตัวแปรจำนวนเต็มที่เราต้องหาความถี่ในอาร์เรย์

  • คำนวณขนาดของอาร์เรย์และส่งข้อมูลทั้งหมดไปยังฟังก์ชันเพื่อการประมวลผลต่อไป

  • ประกาศการนับตัวแปรชั่วคราวเพื่อเก็บจำนวนครั้งที่ตัวแปร num ปรากฏขึ้น

  • ตั้งค่าตัวชี้ก่อนเป็น lower_bound(arr, arr+size, num)

  • ตรวจสอบ IF ก่อน =(arr + size) || (*first !=num) แล้วคืนค่า 0

  • ตั้งค่า end pointer เป็น upper_bound(first, arr+size, num)

  • ตั้งนับเป็นครั้งสุดท้าย - ก่อน

  • จำนวนคืน

  • พิมพ์ผล

ตัวอย่าง (แนวทางไร้เดียงสา)

#include <iostream>
using namespace std;
int frequency_count(int arr[], int num, int size){
   int count = 0;
   for(int i=0; i<size; i++){
      if(num==arr[i]){
         count++;
      }
   }
   return count;
}
int main(){
   int arr[] = {1, 1, 1,2, 3, 4};
   int num = 1;
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of number of occurrences (or frequency) in a sorted array are: "<<frequency_count(arr, num, size);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of number of occurrences (or frequency) in a sorted array are: 3

ตัวอย่าง (แนวทางที่มีประสิทธิภาพ)

# include <bits/stdc++.h>
using namespace std;
int frequency_count(int arr[], int num, int size){
   int *first = lower_bound(arr, arr+size, num);
   if (first == (arr + size) || *first != num){
      cout<<"The Element is not present in an array ";
      return 0;
   }
   int count = 0;
   int *last = upper_bound(first, arr+size, num);
   count = last - first;
   return count;
}
int main(){
   int arr[] = {1, 1, 1, 2, 3, 4};
   int num = 1;
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of number of occurrences (or frequency) in a sorted array are: "<<frequency_count(arr, num, size);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of number of occurrences (or frequency) in a sorted array are: 3