Web Toolbar by Wibiya

Pages

Wednesday, December 14, 2011

Given an array of unsigned integers which is initially increasing and then decreasing, find the maximum value in the array.

Solution #1: This problem can be solved in O(log n) by modifying binary search as follows,

int search(int* arr, int strt, int end)
{
    int mid = (strt+end)/2;

    if((arr[mid-1] < arr[mid]) &&  (arr[mid] > arr[mid+1]))
        return arr[mid];
    else if(arr[mid-1] < arr[mid])
        return search(arr, mid+1, end);
    else if(arr[mid] > arr[mid+1])
        return search(arr, strt, mid-1);
}

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 6, 5, 4};

    printf("%d\n", search(arr, 0, 9));
    return 0;
}

No comments: