在数组中找到一个峰值数字,其中峰值定义为比其相邻元素大的元素,可以使用二分查找算法来实现时间复杂度为O(log n)。
以下是一个Java示例,演示如何在一个整数数组中找到任意一个峰值数字:
public class PeakFinder {
public static int findPeakElement(int[] nums) {
int left = 0, right = nums.length - 1;
while (left < right) {
int mid = left + (right - left) / 2;
// 如果 mid 对应的元素大于其右侧元素,则峰值在 mid 左侧或就是 mid
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else { // 否则峰值在 mid 右侧
left = mid + 1;
}
}
// 循环结束时,left == right,指向一个峰值
return nums[peak];
}
public static void main(String[] args) {
int[] nums = {1, 2, 1, 3, 5, 7, 8, 9};
int peak = findPeakElement(nums);
System.out.println(peak);
}
}