เราได้รับอาร์เรย์ที่เรียงลำดับขององค์ประกอบประเภทจำนวนเต็มและจำนวน สมมติว่า 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