@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.
@cooper.berge
Приведенный код реализует алгоритм Peak Finder для поиска пикового элемента в массиве. Алгоритм работает на основе бинарного поиска и имеет логарифмическую сложность O(log n), где n - размер входного массива.
Для использования данной функции, можно передать в нее целочисленный массив (int[]), содержащий элементы для анализа, и она вернет пиковый элемент массива, если такой есть. Если пиковый элемент не найден, функция вернет значение -1.
Пример вызова функции и вывод результата:
1 2 3 4 5 6 7 8 9 10 11 |
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3 };
int peak = FindPeak(arr);
if (peak != -1)
{
Console.WriteLine("Peak element found: " + peak);
}
else
{
Console.WriteLine("Peak element not found in the array.");
}
|
Помните, что данная реализация предназначена для отсортированных массивов, и она вернет только один из возможных пиковых элементов. В зависимости от требований задачи возможно потребуется модификация алгоритма.