1 条题解
-
0
自动搬运
来自洛谷,原作者为

一只大龙猫
嗷~呜!搬运于
2025-08-24 21:05:45,当前版本为作者最后更新于2021-07-06 14:41:38,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
对于这道题,我们固然可以一个一个去查找(即“顺序查找法”),但我们还可以用更优的方法——哨兵查找法。
先看一下代码。
#include<iostream> using namespace std; int n,a[20000],x,p; int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } cin>>x; a[n]=x; while(a[p]!=x)p++; if(p==n)cout<<"-1"; else cout<<p; return 0; }“哨兵”指的就是 一句中放在 里的数。只要把 放在 里,当 时就一定能找到 ,不会出现 的情况。因此,我们就不用在
while循环中确认 的值是否达到了 。换句话说,我们把原来的
while(p<n){ if(a[p]==x){ cout<<p; return 0; } p++; } cout<<"-1"; return 0;写成了
while(a[p]!=x)p++; if(p==n)cout<<"-1"; else cout<<p; return 0;不但使代码看上去更加简洁,还省去判断 是否等于 的语句,节约了大约 的时间。在 时,节约的时间还不明显。但当 达到 甚至是 时,函数的执行时间就会有显著差距了。
- 1
信息
- ID
- 6950
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者