题目描述
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
本来很简单的一道题,想作为今晚愉快做题的开始,却没想到让我很生气。
刚开始我用的是if(t == -1) break;
来判断数据输入完毕,但测试点2老是报错 内存超限
。后经同学提醒,豁然明白,是我想当然了,题目中并没有说一定是 -1 结束,而是负数就代表输入结束。如果输入的不是-1,就得一直输入,所以内存有可能超限。
测试点明明是n > q.size()即错误位置的特殊情况,内存按理来说不会超限的。但改为
if(t < 0) break;
就AC了这就很让人疑惑,
做题还是要细心一点。
正确代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
int n, t;
cin >> n;
vector<int> q;
while(1){
cin >> t;
if(t < 0) break;
q.push_back(t);
}
if(n <= q.size()) cout << q[q.size()-n];
else cout << "NULL";
}