Given an array of integers, task is to find the starting and ending position of a given key.
Examples:
Input : arr[] = {1, 2, 3, 4, 5, 5} Key = 5 Output : Start index: 4 Last index: 5 Explanation: Starting index where 5 is present is 4 and ending index is 5. Input :arr[] = {1, 3, 7, 8, 6}, Key = 2 Output : Key not present in array Input :arr[] = {1, 8, 7, 8, 6}, Key = 7 Output : Only one occurrence of key is present at index 2
We traverse array from beginning to find first occurrence. If element is present, then we traverse from end also to find last occurrence.
Implementation:
// CPP program to find starting and ending // indexes of repeated numbers in an array #include <iostream> using namespace std;
// Function to find starting and end index void findIndex( int a[], int n, int key)
{ int start = -1;
// Traverse from beginning to find
// first occurrence
for ( int i = 0; i < n; i++) {
if (a[i] == key) {
start = i;
break ;
}
}
if (start == -1) {
cout << "Key not present in array" ;
return ;
}
// Traverse from end to find last
// occurrence.
int end = start;
for ( int i = n - 1; i >= start; i--) {
if (a[i] == key) {
end = i;
break ;
}
}
if (start == end)
cout << "Only one key is present at index : "
<< start;
else {
cout << "Start index: " << start;
cout << "\n" ;
cout << "Last index: " << end;
}
} // Driver Code int main()
{ int a[] = { 1, 2, 7, 8, 8, 9, 8, 0, 0, 0, 8 };
int n = sizeof (a) / sizeof (a[0]);
// Key to find
int key = 8;
// Calling function
findIndex(a, n, key);
return 0;
} |
// Java program to find starting and ending // indexes of repeated numbers in an array class Test {
// Function to find starting and end index
static void findIndex( int a[], int n, int key)
{
int start = - 1 ;
// Traverse from beginning to find
// first occurrence
for ( int i = 0 ; i < n; i++) {
if (a[i] == key) {
start = i;
break ;
}
}
if (start == - 1 ) {
System.out.println( "Key not present in array" );
return ;
}
// Traverse from end to find last
// occurrence.
int end = start;
for ( int i = n - 1 ; i >= start; i--) {
if (a[i] == key) {
end = i;
break ;
}
}
if (start == end)
System.out.println( "Only one key is present at index : " + start);
else {
System.out.println( "Start index: " + start);
System.out.println( "Last index: " + end);
}
}
// Driver method
public static void main(String args[])
{
int a[] = { 1 , 2 , 7 , 8 , 8 , 9 , 8 , 0 , 0 , 0 , 8 };
// Key to find
int key = 8 ;
// Calling method
findIndex(a, a.length, key);
}
} |
# Python3 code to find starting and ending # indexes of repeated numbers in an array # Function to find starting and end index def findIndex (a, n, key ):
start = - 1
# Traverse from beginning to find
# first occurrence
for i in range (n):
if a[i] = = key:
start = i
break
if start = = - 1 :
print ( "Key not present in array" )
return 0
# Traverse from end to find last
# occurrence.
end = start
for i in range (n - 1 , start - 1 , - 1 ):
if a[i] = = key:
end = i
break
if start = = end:
print ( "Only one key is present at index : " , start)
else :
print ( "Start index: " , start)
print ( "Last index: " , end)
# Driver Code a = [ 1 , 2 , 7 , 8 , 8 , 9 , 8 , 0 , 0 , 0 , 8 ]
n = len (a)
# Key to find key = 8
# Calling function findIndex(a, n, key) # This code is contributed by "Sharad_Bhardwaj". |
// C# program to find starting and ending // indexes of repeated numbers in an array using System;
class GFG {
// Function to find starting and
// end index
static void findIndex( int [] a, int n,
int key)
{
int start = -1;
// Traverse from beginning to
// find first occurrence
for ( int i = 0; i < n; i++) {
if (a[i] == key) {
start = i;
break ;
}
}
if (start == -1) {
Console.WriteLine( "Key not "
+ "present in array" );
return ;
}
// Traverse from end to find last
// occurrence.
int end = start;
for ( int i = n - 1; i >= start; i--) {
if (a[i] == key) {
end = i;
break ;
}
}
if (start == end)
Console.WriteLine( "Only one key is"
+ " present at index : "
+ start);
else {
Console.WriteLine( "Start index: "
+ start);
Console.WriteLine( "Last index: "
+ end);
}
}
// Driver method
public static void Main()
{
int [] a = { 1, 2, 7, 8, 8, 9,
8, 0, 0, 0, 8 };
// Key to find
int key = 8;
// Calling method
findIndex(a, a.Length, key);
}
} // This code is contributed by parashar. |
<?php // PHP program to find starting and ending // indexes of repeated numbers in an array // Function to find starting and end index function findIndex( $arr , $find ){
// To store the atrting and
// the ending index of the key
$start = -1;
$end = -1;
// For every element of the given array
foreach ( $arr as $key => $value ) {
// If current element is equal
// to the given key
if ( $find === $value ){
// If starting index hasn't been set
if ( $start ==-1)
$start = $key ;
$end = $key ;
}
}
// If key is not present in the array
if ( $start ==-1){
return "Key not present in array" ;
}
if ( $end == $start ){
return "Only one key is present " . " at index : " . $start ;
}
return "Start index: " . $start . "\nLast index: " . $end ;
} // Driver code $a = array (1, 2, 7, 8, 8, 9, 8, 0, 0, 0, 8);
// Key to find $key = 8;
// Calling function echo findIndex( $a , $key );
?> |
<script> // Javascript program to find starting and ending // indexes of repeated numbers in an array // Function to find starting and end index function findIndex(a, n, key)
{ let start = -1;
// Traverse from beginning to find
// first occurrence
for (let i = 0; i < n; i++) {
if (a[i] == key) {
start = i;
break ;
}
}
if (start == -1) {
document.write( "Key not present in array" );
return ;
}
// Traverse from end to find last
// occurrence.
let end = start;
for (let i = n - 1; i >= start; i--) {
if (a[i] == key) {
end = i;
break ;
}
}
if (start == end)
document.write( "Only one key is present at index : "
+ start);
else {
document.write( "Start index: " + start);
document.write( "<br>" + "Last index: " + end);
}
} // Driver Code let a = [ 1, 2, 7, 8, 8, 9, 8, 0, 0, 0, 8 ];
let n = a.length;
// Key to find
let key = 8;
// Calling function
findIndex(a, n, key);
//This code is contributed by Mayank Tyagi </script> |
Start index: 3 Last index: 10
Time Complexity: Worst case time complexity is O(N), ( when we traverse the whole array and don’t find the element’s start and last indices), where N represents the size of the given array. and best case time complexity will be O(1), when start index is ‘0’ and last index is ‘n – 1’.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Related Article:
Find first and last occurrences of an element in a sorted array