Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm phần tử đỉnh (peak element) trong mảng C++


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.