Phần tử đỉnh (peak) là phần tử **lớn hơn hoặc bằng** cả hai láng giềng. Tìm một peak bất kỳ. Ví dụ: {1,2,5,4,7} → peak có thể là 5 hoặc 7. Chương trình trả về 7 (peak cuối).
Phương pháp: Duyệt tuyến tính
- Kiểm tra phần tử đầu và cuối.
- Duyệt từ 1 đến n-2, nếu arr[i] >= arr[i-1] && arr[i] >= arr[i+1] → trả về.
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
int findPeak(int arr[], int n) {
if (n == 1) return arr[0];
if (arr[0] >= arr[1]) return arr[0];
if (arr[n-1] >= arr[n-2]) return arr[n-1];
for (int i=1;i= arr[i-1] && arr[i] >= arr[i+1])
return arr[i];
return arr[0];
}
int main() {
int arr[] = {1,2,5,4,7};
cout << findPeak(arr, 5); // 7
return 0;
}
Kết quả
7
Có thể tối ưu O(log n) bằng binary search trên peak.