Find first and last occurrence of x
PROBLEM :
Given a sorted array with possibly duplicate elements, the task is to find indexes of first and last occurrences of an element x in the given array.
Examples:
Input : A[] = {1, 3, 5, 5, 5, 5 ,67, 123, 125}
x = 5
Output : First Occurrence = 2
Last Occurrence = 5
Input : A[] = {1, 3, 5, 5, 5, 5 ,7, 123 ,125 }
x = 7
Output : First Occurrence = 6
Last Occurrence = 6
Input:
The first line of input contains an integer T denoting the no of test cases. Then T test cases follow. Each test case contains an integer N denoting the size of the array. Then in the next line are N space separated values of the array. The last line of each test case contains an integer x.
Output:
For each test case in a new line print two integers separated by space denoting the first and last occurrence of the element x. If the element is not present in the array print -1.
Constraints:
1<=T<=101
1<=N<=100
1<=A[],k<=100
Example:
Input:
2
9
1 3 5 5 5 5 67 123 125
5
9
1 3 5 5 5 5 7 123 125
7
Output:
2 5
6 6
--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------
#include<iostream>
using namespace std;
#define max 100
int Occurence(int [],int ,int ,bool ) ;
int main()
{
int arr[max] ;
int k,i,no,t ;
int first,second ;
cin>>t ;
while(t--)
{
cin>>no ;
for(i=0;i<no;i++)
cin>>arr[i] ;
cin>>k ;
first=Occurence(arr,no,k,true) ;
second=Occurence(arr,no,k,false) ;
if(first==-1&&second==-1)
cout<<-1<<endl ;
else
cout<<first<<" "<<second<<endl ;
}
return 0;
}
int Occurence(int arr[],int no,int ele,bool flag)
{
int start,end,mid,result ;
start=0 ;
end=no-1 ;
result=-1 ;
while(start<=end)
{
mid=(start+end)/2 ;
if(arr[mid]==ele)
{
result=mid ;
if(flag)
end=mid-1 ;
else
start=mid+1 ;
}
else if(arr[mid]>ele)
end=mid-1 ;
else
start=mid+1 ;
}
return result ;
}
--------------------------------------------------------------------------------
Given a sorted array with possibly duplicate elements, the task is to find indexes of first and last occurrences of an element x in the given array.
Examples:
Input : A[] = {1, 3, 5, 5, 5, 5 ,67, 123, 125}
x = 5
Output : First Occurrence = 2
Last Occurrence = 5
Input : A[] = {1, 3, 5, 5, 5, 5 ,7, 123 ,125 }
x = 7
Output : First Occurrence = 6
Last Occurrence = 6
Input:
The first line of input contains an integer T denoting the no of test cases. Then T test cases follow. Each test case contains an integer N denoting the size of the array. Then in the next line are N space separated values of the array. The last line of each test case contains an integer x.
Output:
For each test case in a new line print two integers separated by space denoting the first and last occurrence of the element x. If the element is not present in the array print -1.
Constraints:
1<=T<=101
1<=N<=100
1<=A[],k<=100
Example:
Input:
2
9
1 3 5 5 5 5 67 123 125
5
9
1 3 5 5 5 5 7 123 125
7
Output:
2 5
6 6
--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------
#include<iostream>
using namespace std;
#define max 100
int Occurence(int [],int ,int ,bool ) ;
int main()
{
int arr[max] ;
int k,i,no,t ;
int first,second ;
cin>>t ;
while(t--)
{
cin>>no ;
for(i=0;i<no;i++)
cin>>arr[i] ;
cin>>k ;
first=Occurence(arr,no,k,true) ;
second=Occurence(arr,no,k,false) ;
if(first==-1&&second==-1)
cout<<-1<<endl ;
else
cout<<first<<" "<<second<<endl ;
}
return 0;
}
int Occurence(int arr[],int no,int ele,bool flag)
{
int start,end,mid,result ;
start=0 ;
end=no-1 ;
result=-1 ;
while(start<=end)
{
mid=(start+end)/2 ;
if(arr[mid]==ele)
{
result=mid ;
if(flag)
end=mid-1 ;
else
start=mid+1 ;
}
else if(arr[mid]>ele)
end=mid-1 ;
else
start=mid+1 ;
}
return result ;
}
--------------------------------------------------------------------------------
Comments
Post a Comment