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;
}