「力扣」第 1095 题:山脉数组中查找目标值

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

大家好,这里是力扣视频题解。

今天要和大家分享的是第 1095 号问题:山脉数组中查找目标值。

这道题虽然是标注为 hard 的一道问题,但是思路并不难想到。并且,如果大家做过第 852 号问题:山脉数组的峰顶索引,相信解决这道问题就不在话下。

我们来看一下问题的描述:

1、首先这是一个:交互式问题。所谓交互式问题,就是我们可以调用一个题目给出的接口。

我们要相信这个接口返回的数据永远是正确的。并且通过调用接口,完成题目要求的任务。

比较麻烦的是在测试上,如果在本地测试的话就需要实现接口。为此,在编码上,就需要保证的逻辑是非常清晰、且完全正确的。


2、这道题让我们找出在山脉数组中等于目标元素的最小的下标值。

什么是山脉数组呢?题目有一个定义。

  • 首先这个数组的长度大于等于 333。它其实是第 2 点的前提:

  • 在这个数组的有效范围内,存在这样的一个关系式:

    • 前增后减,A[i] 是山脉数组中的最大值。
    • 注意:这里给出的下标,从 000 开始到数组的长度减 111,并且不等符号都是严格符号(不存在等于的情况)。

根据题目的描述,我们可以很清楚地在脑海里呈现出这样的山脉的形状。

只有 1 个峰顶元素,是这两条提示告诉我们的,这个信息在解决这道问题的过程中非常重要。


题目还说我们 不能直接访问该山脉数组,必须通过一个接口 MountainArray 接口来获取数据。

接口的两个方法意思是非常明确的,通过下标获得一个元素的值,以及山脉数组的长度。

注意:对接口的 get 函数发起超过 100100100 次调用的提交将被视为错误答案。

也就是说这个接口是 访问敏感 的,或者说访问成本比较高。题目希望我们能够通过尽量少的调用接口,来找到目标元素出现的最小下标。

所以「遍历整个数组」这个思路是行不通的。


我们来看两个示例:

第 1 个示例强调了,如果在山脉数组中,存在和目标元素相等的元素,我们返回最早出现的下标;

而第 2 个示例,告诉我们如果山脉数组中不存在目标元素,返回 −1-11


最后我们来看提示:

大家在做题的时候千万不要忽视,题目中对于 输入数据 范围的相关提示。

输入

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值