diff --git a/code/algorithm_applications/src/binary_search/peak_element_in_a_mountain_array/peak.c b/code/algorithm_applications/src/binary_search/peak_element_in_a_mountain_array/peak.c new file mode 100644 index 0000000000..0000952ab2 --- /dev/null +++ b/code/algorithm_applications/src/binary_search/peak_element_in_a_mountain_array/peak.c @@ -0,0 +1,32 @@ +#include + +int findPeakUtil(int arr[], int low, int high, int n) +{ + int mid = low + (high - low)/2; + + if ((mid == 0 || arr[mid-1] <= arr[mid]) && + (mid == n-1 || arr[mid+1] <= arr[mid])) + return mid; + + + else if (mid > 0 && arr[mid-1] > arr[mid]) + return findPeakUtil(arr, low, (mid -1), n); + + + else return findPeakUtil(arr, (mid + 1), high, n); +} + + +int findPeak(int arr[], int n) +{ + return findPeakUtil(arr, 0, n-1, n); +} + + +int main() +{ + int arr[] = {1, 3, 20, 4, 1, 0}; + int n = sizeof(arr)/sizeof(arr[0]); + printf("Index of a peak point is %d", findPeak(arr, n)); + return 0; +} \ No newline at end of file diff --git a/code/algorithm_applications/src/binary_search/peak_element_in_a_mountain_array/peak.cpp b/code/algorithm_applications/src/binary_search/peak_element_in_a_mountain_array/peak.cpp new file mode 100644 index 0000000000..2ea105aee0 --- /dev/null +++ b/code/algorithm_applications/src/binary_search/peak_element_in_a_mountain_array/peak.cpp @@ -0,0 +1,31 @@ +#include +#include + +using namespace std; + + int peakIndexInMountainArray(std::vector& arr) { + int n=arr.size(); + int s=0; + int e = n-1; + int mid = s + (e-s)/2; + while(s arr; + arr.push_back(0); + arr.push_back(1); + arr.push_back(4); + + + int ans = peakIndexInMountainArray(arr); + cout< arr[mid]): + + left = mid + 1 + + else: + + right = mid - 1 + + return -1 + +def reverseBS(X, left, right, arr): + + while (left <= right): + + mid = left + (right - left) + + if (arr[mid] == X): + return mid + + elif (X > arr[mid]): + + right = mid - 1 + + else: + + left = mid + 1 + + return -1 + +def findInMA(X, mountainArr): + + peakIndex = findPeak(mountainArr) + + res = -1 + + + if (X >= mountainArr[0] and + X <= mountainArr[peakIndex]): + + res = BS(X, 0, peakIndex, mountainArr) + + + if (res == -1): + + res = reverseBS(X, peakIndex + 1, + mountainArr.size() - 1, + mountainArr) + + print(res) + +if __name__ == "__main__": + + + X = 3 + + arr = [ 1, 2, 3, 4, 5, 3, 1 ] + + findInMA(X, arr) + +