题目

符合下列属性的数组 arr 称为 山脉数组 :
arr.length >= 3
存在 i(0 < i < arr.length - 1)使得:

  • arr[0] < arr[1] < … arr[i-1] < arr[i]

  • arr[i] > arr[i+1] > … > arr[arr.length - 1]
    给你由整数组成的山脉数组 arr ,返回任何满足 arr[0] < arr[1] < … arr[i - 1] < arr[i] > arr[i + 1] > … > arr[arr.length - 1] 的下标 i 。

  • 示例 1:

输入:arr = [0,1,0]
输出:1

  • 示例 2:

输入:arr = [0,2,1,0]
输出:1

  • 示例 3:

输入:arr = [0,10,5,2]
输出:1

  • 示例 4:

输入:arr = [3,4,5,1]
输出:2

  • 示例 5:

输入:arr = [24,69,100,99,79,78,67,36,26,19]
输出:2

提示:

  • 3 <= arr.length <= 104
  • 0 <= arr[i] <= 106

一次遍历

找出第一个递减的转折点,该转折点的前一个下标即为山峰

代码

class Solution {public int peakIndexInMountainArray(int[] arr) {for (int i=1;i<arr.length;i++){if(arr[i]<arr[i-1])return i-1;}return -1;}
}

二分法


利用题目发现如下性质:由于 arr 数值各不相同,因此峰顶元素左侧必然满足严格单调递增,峰顶元素右侧必然不满足。

该数组是山峰数组,可以将顶点的左右两侧分为上坡和下坡,上坡是递增数组,下坡是递减数组,因此可以以下条件进行二分查找,

  • 如果arr[mid]>arr[mid-1]说明当前区间[l,mid]都是递增数组,因此顶点只会出现在[mid+1,r]区间,
  • 如果arr[mid]<arr[mid-1]说明当前区间[mid,r]都是递减数组,因此顶点只会出现在[l,mid-1]区间,

代码

class Solution {public int peakIndexInMountainArray(int[] arr) {int l=1,r=arr.length-2;while (l<=r){int mid=(r-l)/2+l;if(arr[mid]>arr[mid-1])l=mid+1;else r=mid-1;}return r;}
}

leetcode 852. 山脉数组的峰顶索引(二分查找)相关推荐

  1. [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找)

    [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找) 题目:符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < ...

  2. LeetCode 852. 山脉数组的峰顶索引

  3. 【LeetCode】852. 山脉数组的峰顶索引(C++)

    852. 山脉数组的峰顶索引 1 题目描述 2 示例描述 2.1 示例1 2.2 示例2 2.3 示例3 2.4 示例4 2.5 示例5 3 解题提示 4 解题思路 5 代码详解 1 题目描述 符合下 ...

  4. 852.山脉数组的峰顶索引---LeetCode(java实现)

    解题思路: 思路很简单:就是遍历数组,找到一个数组索引,使得他前一个元素比他小,后一个元素比他大. 不过这里需要注意:遍历的时候从索引1开始. class Solution {public int p ...

  5. z12_852. 山脉数组的峰顶索引

    一.题目 二.想法 三.复杂度分析 四.优秀解法 五.学到了什么 一.题目 852. 山脉数组的峰顶索引 https://leetcode-cn.com/problems/peak-index-in- ...

  6. 20191022:(leetcode习题)山脉数组的峰顶索引

    山脉数组的峰顶索引 题目 大致思路 代码实现 题目 我们把符合下列属性的数组 A 称作山脉: A.length >= 3存在 0 < i < A.length - 1 使得A[0] ...

  7. python 山脉数组的峰顶索引

    | 山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < i < arr.length - 1)使得: arr[0] ...

  8. leetcode852. 山脉数组的峰顶索引(二分法)

    我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < - A[i-1] & ...

  9. LeetCode(852)——山脉数组的峰顶索引(JavaScript)

    我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] ...

最新文章

  1. html代码闪烁的文字怎么打,HTML最简单的文字闪烁代码
  2. js立即调用的函数表达式
  3. 深度学习核心技术精讲100篇(四十六)-情感分析算法在阿里小蜜的应用实践
  4. Java练习 SDUT-2401最大矩形面积
  5. c# 通过鼠标点击绘制多边形
  6. 藏的太深!原来支付宝还有另一个“集福”活动
  7. 如何使用Visual Studio无需成本即可实现连续集成
  8. 自学Java第一周的总结
  9. 前端工程化/构建自动化
  10. android大智慧安装目录,大智慧文件目录
  11. 《文明的冲突与世界秩序的重建》摘
  12. vn.py源码解读(八、回测结果计算代码解析)
  13. CPU核心、进程、线程
  14. word中选不中、删不掉、造成奇怪问题的横线
  15. 大智能时代,未来人工智能发展新趋势
  16. spring的工作原理总结
  17. 阿里云字体图标的引用
  18. 最近有两个请了专业团队做地推
  19. AI技术实践|用腾讯云慧眼微信浮层H5解决黄牛抢票问题
  20. C语言题目奶牛牧场,C语言算法训练:安慰奶牛

热门文章

  1. 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
  2. 【微机原理与接口技术】具体芯片(1)并行接口8255A(2):控制字概述
  3. [New Portal]Windows Azure Web Site (4) Web Site Gallery
  4. luogu P3244 [HNOI2015]落忆枫音
  5. 条件变量 sync.Cond
  6. python 的datetime模块使用
  7. php上传大文件时,服务器端php.ini文件中需要额外修改的选项
  8. ftp如何预览图片 解决方案
  9. eclipse编辑jsp文件和javascript代码很卡解决办法
  10. Java学习笔记-正则表达式的模式匹配