Search the index

You are given with an array of integer and the length of array. Now u have to find an index i such that a(i)=i.

Comments

  1. This can be done in O(logN) time and O(1) space by using a slightly modified binary search.

    Consider a new array Y such that Y[i] = X[i] - i

    Array X : -3 -1 0 3 5 7
    index : 0 1 2 3 4 5
    Array Y : -3 -2 -2 0 1 2
    Since the elements in X are in increasing order, the elements in the new array Y will be in non-decreasing order. So a binary search for 0 in Y will give the answer.

    But creating Y will take O(N) space and O(N) time. So instead of creating the new array you just modify the binary search such that a reference to Y[i] is replaced by X[i] - i.

    Code :
    int FindIndex_Value(int a[],int low,int high){
    int mid = (low+high)/2;

    if( a[mid] == mid )
    return mid;
    if(a[mid]< mid)
    return FindIndex_Value(a,low,mid-1);
    else
    return FindIndex_Value(a,mid+1,high);
    }

    ReplyDelete

Post a Comment

Popular posts from this blog