面试算法69:山峰数组的顶部
2023-12-22 17:39:57
题目
在一个长度大于或等于3的数组中,任意相邻的两个数字都不相等。该数组的前若干数字是递增的,之后的数字是递减的,因此它的值看起来像一座山峰。请找出山峰顶部,即数组中最大值的位置。例如,在数组[1,3,5,4,2]中,最大值是5,输出它在数组中的下标2。
分析
可以根据山峰数组的这个特点应用二分查找算法。先取出位于数组中间的数字。如果这个数字比它前后两个数字都大,那么就找到了数组的最大值。如果这个数字比它前一个数字大但比后一个数字小,那么这个数字位于数组递增的部分,数组的最大值一定在它的后面,接下来只需要在数组的后半部分查找就可以。如果这个数字比它前一个数字小但比后一个数字大,那么这个数字位于数组递减的部分,数组的最大值一定在它的前面,接下来只需要在数组的前半部分查找就可以。
解
public class Test {
public static void main(String[] args) {
int[] nums = {1, 3, 5, 4, 2};
System.out.println(peakIndexInMountainArray(nums));
}
public static int peakIndexInMountainArray(int[] nums) {
int left = 1;
int right = nums.length - 2;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] > nums[mid + 1] && nums[mid] > nums[mid - 1]) {
return mid;
}
if (nums[mid] > nums[mid - 1]) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
}
文章来源:https://blog.csdn.net/GoGleTech/article/details/135155742
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!