เราได้รับอาร์เรย์ของจำนวนเต็ม เป้าหมายคือการหาจำนวนองค์ประกอบของอาร์เรย์ที่น้อยกว่าหรือเท่ากับค่าที่กำหนด K
ป้อนข้อมูล
Arr[]= { 1, 2, 3, 14, 50, 69, 90 } K=12
ผลผลิต
Numbers smaller or equal to K: 3
คำอธิบาย
Numbers 1,2,3 is smaller or equal to 12.
ป้อนข้อมูล
Arr[]= { 12, 13, 13, 13, 14, 50, 54, 100 } K=14
ผลผลิต
Numbers smaller or equal to K: 5
คำอธิบาย
Numbers 12, 13, 14 are smaller or equal to 14.
แนวทางที่ไร้เดียงสา
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้อาร์เรย์จำนวนเต็ม Arr[] และ K.
-
ฟังก์ชั่น smallorEqual(int arr[],int k,int len) คืนค่าจำนวนขององค์ประกอบของ arr[] ที่เล็กหรือเท่ากับ K
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับตัวเลขดังกล่าว
-
อาร์เรย์การเคลื่อนที่ของตัวเลขโดยใช้ for loop i=0 ถึง i
-
ตอนนี้สำหรับแต่ละตัวเลข arr[i] หากเป็น <=k ให้นับการเพิ่มขึ้น
-
เมื่อสิ้นสุดการวนซ้ำจะมีจำนวนรวมที่ตรงตามเงื่อนไข
-
คืนค่าการนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int smallorEqual(int arr[],int k,int len){ int count = 0; for (int i = 0; i < len; i++){ if(arr[i]<=k) { count++; } else { break; } } return count; } int main(){ int Arr[] = { 1,5,11,12,19,21,32,53,70,100 }; int K = 21; int Length= sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers smaller or equal to K: "<<smallorEqual(Arr,K,Length); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Numbers smaller or equal to K: 6
แนวทางที่มีประสิทธิภาพ ( การใช้การค้นหาแบบไบนารี )
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้อาร์เรย์จำนวนเต็ม Arr[] และ K.
-
ฟังก์ชัน binarySearch(int arr[],int k,int len) คืนค่าจำนวนขององค์ประกอบของ arr[] ที่เล็กหรือเท่ากับ K
-
ใช้ดัชนีต่ำ=0,สูง=len-1และกลาง=(ต่ำ+สูง)/2;/p>
-
ใช้ดัชนีตัวแปร=-1;
-
ใช้ while loop จนถึงระดับต่ำ<=high
-
ตรวจสอบค่าของ arr[mid] ถ้าเป็น <=k จากนั้น index=mid ใหม่ ต่ำ=กลาง+1
-
มิฉะนั้น new high=mid-1.
-
ที่ส่วนท้ายของ while loop index จะเป็นดัชนีของตัวเลขสุดท้าย<=k.
-
ส่งคืน index+1 เป็นผลลัพธ์เนื่องจากการจัดทำดัชนีอาร์เรย์เริ่มต้นจาก 0 และตัวเลขทั้งหมดจากดัชนี 0 ถึงดัชนีมีค่าน้อยกว่า k
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int binarySearch(int arr[],int k,int len){ int low = 0; int high = len -1; int mid = (high+low)/2; int index = -1; while(low <= high){ mid =( low + high ) / 2; if(arr[mid] <= k){ index = mid; low = mid+1; } else{ high=mid-1; } } return (index+1); } int main(){ int Arr[] = { 1,5,11,12,19,21,32,53,70,100 }; int K = 21; int Length= sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers smaller or equal to K: "<<binarySearch(Arr,K,Length); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Numbers smaller or equal to K: 6