From 90e60e7537c82c38faad5319579c9a3701d07f79 Mon Sep 17 00:00:00 2001 From: Prakhar Sharma <44018122+prakharsharma27@users.noreply.github.com> Date: Sun, 9 Oct 2022 21:00:00 +0530 Subject: [PATCH] Add files via upload --- GFG_EfficientFirstOccu.cpp | 94 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 GFG_EfficientFirstOccu.cpp diff --git a/GFG_EfficientFirstOccu.cpp b/GFG_EfficientFirstOccu.cpp new file mode 100644 index 0000000..796d4f6 --- /dev/null +++ b/GFG_EfficientFirstOccu.cpp @@ -0,0 +1,94 @@ +#include +using namespace std; + +// RECURSIVE + +int find(int *arr,int low,int high, int x){ + if(highx){ + return find(arr,low,mid-1,x); + } + else{ + if(mid==0||(arr[mid]!=arr[mid-1])){ + // cout<<"hello"; + return mid; + } + else{ + return find(arr,low,mid-1,x); + } + } + } +} + + +// ITERATIVE + +int findIterative(int *arr,int n,int x){ + int low=0,high=n-1; + while(low<=high){ + int mid=(low+high)/2; + if(arr[mid]x){ + high=mid-1; + } + else{ + if(mid==0||(arr[mid]!=arr[mid-1])){ + return mid; + } + else{ + high=mid-1; + } + } + } + return -1; +} + +int findLastOccu(int *arr,int n,int x){ + int low=0,high=n-1; + while(low<=high){ + int mid=(low+high)/2; + if(arr[mid]x){ + high=mid-1; + } + else{ + if(mid==n-1||arr[mid]!=arr[mid+1]){ + return mid; + } + else{ + low=mid+1; + } + } + } + return -1; +} + +int numberOccu(int *arr,int n,int x){ + int first=findIterative(arr,n,x); + if(first==-1){ + return 0; + } + else{ + return (findLastOccu(arr,n,x)-first+1); + } +} + +int main(){ + int arr[]={10,10,15,20,20,20}; + int n=6; + // cout<