Как реализовать алгоритм Peak Finder на C#?

Пользователь

от cooper.berge , в категории: Другие , 6 месяцев назад

Как реализовать алгоритм Peak Finder на C#?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от nicola , 6 месяцев назад

@cooper.berge 

Вот одна из возможных реализаций алгоритма Peak Finder на C#:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static int FindPeak(int[] arr)
{
    int n = arr.Length;
    int left = 0;
    int right = n - 1;

    while (left <= right)
    {
        int mid = (left + right) / 2;

        // Сравниваем элемент со своими соседями
        if ((mid == 0 || arr[mid] >= arr[mid - 1]) && 
            (mid == n - 1 || arr[mid] >= arr[mid + 1]))
        {
            return arr[mid]; // Найден пиковый элемент
        }
        else if (mid > 0 && arr[mid - 1] > arr[mid]) // Идем влево
        {
            right = mid - 1;
        }
        else // Идем вправо
        {
            left = mid + 1;
        }
    }
    
    return -1; // Пиковый элемент не найден
}


Данный код реализует алгоритм бинарного поиска на отсортированном массиве. Он ищет пиковый элемент, который больше или равен своим соседям.


Вызов FindPeak(arr) вернет пиковый элемент массива arr, если такой элемент существует. В противном случае будет возвращено значение -1.