大家好,这里是力扣视频题解。
今天要和大家分享的是第 1095 号问题:山脉数组中查找目标值。
这道题虽然是标注为 hard 的一道问题,但是思路并不难想到。并且,如果大家做过第 852 号问题:山脉数组的峰顶索引,相信解决这道问题就不在话下。
我们来看一下问题的描述:
1、首先这是一个:交互式问题。所谓交互式问题,就是我们可以调用一个题目给出的接口。
我们要相信这个接口返回的数据永远是正确的。并且通过调用接口,完成题目要求的任务。
比较麻烦的是在测试上,如果在本地测试的话就需要实现接口。为此,在编码上,就需要保证的逻辑是非常清晰、且完全正确的。
2、这道题让我们找出在山脉数组中等于目标元素的最小的下标值。
什么是山脉数组呢?题目有一个定义。
-
首先这个数组的长度大于等于 333。它其实是第 2 点的前提:
-
在这个数组的有效范围内,存在这样的一个关系式:
- 前增后减,
A[i]是山脉数组中的最大值。 - 注意:这里给出的下标,从 000 开始到数组的长度减 111,并且不等符号都是严格符号(不存在等于的情况)。
- 前增后减,
根据题目的描述,我们可以很清楚地在脑海里呈现出这样的山脉的形状。
只有 1 个峰顶元素,是这两条提示告诉我们的,这个信息在解决这道问题的过程中非常重要。
题目还说我们 不能直接访问该山脉数组,必须通过一个接口 MountainArray 接口来获取数据。
接口的两个方法意思是非常明确的,通过下标获得一个元素的值,以及山脉数组的长度。
注意:对接口的 get 函数发起超过 100100100 次调用的提交将被视为错误答案。
也就是说这个接口是 访问敏感 的,或者说访问成本比较高。题目希望我们能够通过尽量少的调用接口,来找到目标元素出现的最小下标。
所以「遍历整个数组」这个思路是行不通的。
我们来看两个示例:
第 1 个示例强调了,如果在山脉数组中,存在和目标元素相等的元素,我们返回最早出现的下标;
而第 2 个示例,告诉我们如果山脉数组中不存在目标元素,返回 −1-1−1。
最后我们来看提示:
大家在做题的时候千万不要忽视,题目中对于 输入数据 范围的相关提示。
输入

解析第1095号问题:山脉数组中查找目标值。利用二分查找算法,结合峰顶元素特性,高效定位目标元素。
最低0.47元/天 解锁文章
1954

被折叠的 条评论
为什么被折叠?



