1 条题解
-
0
📝 题目大意
给定 个递增的点击时刻 ,以及一个时间间隔 。若存在相邻两次点击满足 ,则称在 时刻成功双击。求首次成功双击的时刻,若不存在则输出 。
💡 解题思路
- 题目分析:,数据量极小,且 已按升序给出。由于"双击"只关心相邻两次点击,只需要顺序扫描即可。
- 算法推导:遍历 从 到 ,检查 。一旦找到满足条件的相邻对,直接输出 (即第二次点击的时刻)并结束程序。若遍历完仍未找到,输出 。
- 边界与细节:
- 时,循环条件
i < N-1不成立,不会进入循环,直接输出 ,符合题意。 - 差值可能很大( 最大 ),使用
int()足够存储,不会溢出。 - 题目要求输出第一次成功双击的时刻,因此找到第一个满足条件的对就立即输出并返回,无需继续遍历。
- 时,循环条件
⏱️ 复杂度分析
- 时间复杂度:,只需一次线性扫描。
- 空间复杂度:,存储 个点击时刻。
💻 标准代码 (C++)
#include <iostream> #include <vector> using namespace std; int main() { int N, D; cin >> N >> D; vector<int> T(N); for (int i = 0; i < N; i++) { cin >> T[i]; } // 遍历相邻点击对,检查是否构成双击 for (int i = 0; i < N - 1; i++) { if (T[i + 1] - T[i] <= D) { // 找到第一个满足条件的双击,输出第二次点击的时刻 cout << T[i + 1] << endl; return 0; } } // 没有找到任何双击 cout << -1 << endl; return 0; }
- 1
信息
- ID
- 700
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者