@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.