Algorithm : Write a method that takes a sorted array A of integers and a key k and returns the index of first occurrence of k in A. Return -1 if k does does not appear in A.
Blog on Algorithms, Data Structures, Codes, Java and Mobile platforms
Sharing the bit I know
HomeAbout
« Implement a fast integer square root function that takes in a 32-bit unsigned integer and returns another 32-bit unsigned integer that is the floor of the square root of the input.Suppose that in addition to being sorted, the entries of A are distinct integers. Design an efficient algorithm for finding an index i such that A[i] = i or indicating that no such index exist »
Write a method that takes a sorted array A of integers and a key k and returns the index of first occurrence of k in A. Return -1 if k does does not appear in A.
public class FindFirstOccurrenceBinarySearch {
/**
- @param args
*/
public static void main(String[] args) {
int [] input = {1,1,1,1,2,2,2,3,3,3,3,3,3,3,4,4,4};
int key = 2;
System.out.println(“The first ocurrence of key :”+key +” is at:”+getFirstOccurrence(input,key));
}
private static int getFirstOccurrence(int[] input, int key) {
int low = 0;
int high = input.length-1;
int mid = 0;
int indexFound = -1;
while (low <= high)
{
mid = low + (high – low)/2;
if(key == input[mid])
{
indexFound = mid;
break;
}
else if(key > input[mid])
{
low = mid + 1;
}
else
{
high = mid -1;
}
}
if (indexFound != -1)
{
System.out.println(indexFound);
//first ocurrence must be between start of array and indexFound
low = 0;
high = indexFound;
while( low <= high)
{
mid = low + (high-low)/2;
System.out.println(low +”:”+high+”:”+mid);
if(key != input [mid])
{
low = mid + 1;
}
else
{
indexFound = mid;
high = mid – 1;
}
}
}
return indexFound;
}
}