Find peak Element in array

Here's the C++ code for both the linear scan and binary search approaches to find a peak element in an array:

Linear Search

#include <iostream>
#include <vector>

int findPeak(const std::vector<int>& arr) {
    int n = arr.size();
    for (int i = 1; i < n - 1; ++i) {
        if (arr[i] >= arr[i - 1] && arr[i] >= arr[i + 1]) {
            return arr[i];
        }
    }
    return std::max(arr[0], arr[n - 1]);
}

int main() {
    std::vector<int> arr = {1, 3, 20, 4, 1, 0};
    std::cout << "Peak Element: " << findPeak(arr) << std::endl;
    return 0;
}

Binary Search (Optimized):

#include <iostream>
#include <vector>

int findPeakBinarySearch(const std::vector<int>& arr, int low, int high) {
    int mid = low + (high - low) / 2;

    if ((mid == 0 || arr[mid - 1] <= arr[mid]) && (mid == arr.size() - 1 || arr[mid + 1] <= arr[mid])) {
        return arr[mid];
    }

    if (mid > 0 && arr[mid - 1] > arr[mid]) {
        return findPeakBinarySearch(arr, low, mid - 1);
    } else {
        return findPeakBinarySearch(arr, mid + 1, high);
    }
}

int findPeak(const std::vector<int>& arr) {
    return findPeakBinarySearch(arr, 0, arr.size() - 1);
}

int main() {
    std::vector<int> arr = {1, 3, 20, 4, 1, 0};
    std::cout << "Peak Element: " << findPeak(arr) << std::endl;
    return 0;
}