1 条题解
-
0
📝 题目大意
有 座大楼横向排列,第 座大楼高度为 。判断是否存在比第 座大楼更高的大楼,若存在则输出其中最靠左的大楼编号(从 开始计数),否则输出 。
💡 解题思路
-
题目分析:,,数据范围极小,直接暴力扫描即可。关键在于理解"最靠左"意味着从左到右遍历,遇到第一个满足条件的就停止。
-
算法推导:
- 记 为基准高度
first。 - 初始化答案
ans = -1(表示未找到)。 - 从 到 (对应代码中
i = 1到N-1,下标从 开始)依次检查:- 若 ,则
ans = i + 1(转为 基编号),并立即break退出循环,保证得到的是最靠左的答案。
- 若 ,则
- 输出
ans。
- 记 为基准高度
-
边界与细节:
- 所有大楼高度均不大于第 座时,
ans保持为 ,直接输出即可。 - 注意输出的是 基编号,而代码中数组下标从 开始,因此需要用
i + 1转换。
- 所有大楼高度均不大于第 座时,
⏱️ 复杂度分析
- 时间复杂度:,最坏情况下扫描完整个数组。
- 空间复杂度:,存储高度的数组(也可优化为 ,但 无必要)。
💻 标准代码 (C++)
#include <iostream> #include <vector> using namespace std; int main() { int N; cin >> N; vector<int> H(N); for (int i = 0; i < N; i++) { cin >> H[i]; // 读入所有大楼高度 } int first = H[0]; // 基准高度:第 1 座大楼的高度 int ans = -1; // 默认答案 -1,表示未找到 for (int i = 1; i < N; i++) { // 从第 2 座大楼开始向右扫描 if (H[i] > first) { // 找到第一个比 H1 高的 ans = i + 1; // 转为 1 基编号 break; // 立即退出,保证是最靠左的 } } cout << ans << endl; return 0; } -
- 1
信息
- ID
- 794
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者