@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."); } |
Помните, что данная реализация предназначена для отсортированных массивов, и она вернет только один из возможных пиковых элементов. В зависимости от требований задачи возможно потребуется модификация алгоритма.