题目链接
英文链接:https://leetcode.com/problems/find-in-mountain-array/
中文链接:https://leetcode-cn.com/problems/find-in-mountain-array/
题目详述
(这是一个 交互式问题 )
给你一个 山脉数组 mountainArr
,请你返回能够使得 mountainArr.get(index)
等于 target
最小 的下标 index
值。
如果不存在这样的下标 index
,就请返回 -1。
所谓山脉数组,即数组 A 假如是一个山脉数组的话,需要满足如下条件:
首先,A.length >= 3
其次,在 0 < i < A.length - 1
条件下,存在 i 使得:
A[0] < A[1] < ... A[i-1] < A[i]
A[i] > A[i+1] > ... > A[A.length - 1]
你将 不能直接访问该山脉数组,必须通过 MountainArray
接口来获取数据:
MountainArray.get(k)
- 会返回数组中索引为k 的元素(下标从 0 开始)MountainArray.length()
- 会返回该数组的长度
注意:
对 MountainArray.get
发起超过 100 次调用的提交将被视为错误答案。此外,任何试图规避判题系统的解决方案都将会导致比赛资格被取消。
为了帮助大家更好地理解交互式问题,我们准备了一个样例 “答案”:https://leetcode-cn.com/playground/RKhe3ave,请注意这 不是一个正确答案。
示例 1:
1 | 输入:array = [1,2,3,4,5,3,1], target = 3 |
示例 2:
1 | 输入:array = [0,1,2,4,2,1], target = 3 |
提示:
- 3 <= mountain_arr.length() <= 10000
- 0 <= target <= 10^9
- 0 <= mountain_arr.get(index) <= 10^9
题目详解
- 本题是 LeetCode852-山脉数组的峰顶索引 的进阶版,需要找到峰顶下标,然后再做处理。
- 题目加了很多限制条件,实际上就是不允许使用线性扫描,需要使用二分查找。
- 最多进行三次二分查找,第一次查找峰顶,第二次在左斜坡查找目标值,第三次在右斜坡查找目标值。
1 | public class LeetCode_01095 { |