面试算法69:山峰数组的顶部

题目

在一个长度大于或等于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;
    }
}

相关推荐

  1. 面试算法69山峰顶部

    2023-12-23 12:54:02       53 阅读
  2. 「优选算法」:山脉峰顶索引

    2023-12-23 12:54:02       48 阅读
  3. 面试算法-125-除自身以外乘积

    2023-12-23 12:54:02       35 阅读
  4. 基本算法

    2023-12-23 12:54:02       57 阅读
  5. 排序算法

    2023-12-23 12:54:02       23 阅读
  6. 山峰三元问题O(n)解法

    2023-12-23 12:54:02       40 阅读
  7. 面试-旋转三种方法

    2023-12-23 12:54:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-23 12:54:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-23 12:54:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-23 12:54:02       82 阅读
  4. Python语言-面向对象

    2023-12-23 12:54:02       91 阅读

热门阅读

  1. Linux中vim常用的命令

    2023-12-23 12:54:02       54 阅读
  2. 第一章 $ZF Callout接口

    2023-12-23 12:54:02       57 阅读
  3. 力扣:205. 同构字符串(Python3)

    2023-12-23 12:54:02       79 阅读
  4. 我的创作纪念日

    2023-12-23 12:54:02       76 阅读
  5. 【宽度优先搜索 BFS】LeetCode-200. 岛屿数量

    2023-12-23 12:54:02       57 阅读
  6. 《open3D+pyqt》第一章——las格式点云读取

    2023-12-23 12:54:02       61 阅读
  7. SpringMVC系列之技术点定向爆破一

    2023-12-23 12:54:02       56 阅读
  8. vue点击当前盒子以外任意地方隐藏当前盒子

    2023-12-23 12:54:02       60 阅读
  9. 登录接口开发 - 登录注册开发入门(3)

    2023-12-23 12:54:02       69 阅读